[zope2-tracker] [Bug 414757] Re: HTTPRequest.resolve_url clears site thread global

Andi Zeidler az at zitc.de
Thu Oct 15 05:07:08 EDT 2009

the fix currently breaks subscribers to the `EndRequestEvent`: the
following error occurs when a persistent registry tries to get unghosted
so that such events can be dispatched:

  2009-10-15 10:58:50 ERROR ZServerPublisher exception caught
  Traceback (most recent call last):
    File ".../Zope2/src/ZServer/PubCore/ZServerPublisher.py", line 31, in __init__
    File ".../Zope2/src/ZPublisher/Publish.py", line 430, in publish_module
      environ, debug, request, response)
    File ".../Zope2/src/ZPublisher/Publish.py", line 256, in publish_module_standard
      if request is not None: request.close()
    File ".../Zope2/src/ZPublisher/BaseRequest.py", line 215, in close
      notify(EndRequestEvent(None, self))
    File ".../zope.event-3.4.1-py2.6.egg/zope/event/__init__.py", line 23, in notify
    File ".../zope.component-3.7.1-py2.6.egg/zope/component/event.py", line 26, in dispatch
      for ignored in zope.component.subscribers(event, None):
    File ".../zope.component-3.7.1-py2.6.egg/zope/component/_api.py", line 138, in subscribers
      return sitemanager.subscribers(objects, interface)
    File ".../ZODB3-3.9.2-py2.6-macosx-10.6-i386.egg/ZODB/Connection.py", line 831, in setstate
      raise ConnectionStateError(msg)
  ConnectionStateError: Shouldn't load state for 0x0e22 when the connection is closed

the problem should be fixed by reversing the calls in
"ZPublisher/BaseRequest.py", line 213, in close:

  def close(self):
      notify(EndRequestEvent(None, self))

`self._held` is set to `None` in `clear()`, which causes the ZODB
connection to be closed.  however, event subscribers may still need to
access it.  triggering the event first should fix things again...

HTTPRequest.resolve_url clears site thread global
You received this bug notification because you are a member of Zope 2
Developers, which is subscribed to Zope 2.

More information about the zope2-tracker mailing list