Opened 9 years ago

Closed 7 years ago

#2854 defect closed fixed (fixed)

Reactor claims not be running although has been called

Reported by: htj Owned by:
Priority: normal Milestone:
Component: core Keywords:
Cc: therve, exarkun Branch:



The following code fails in current twisted trunk:

from twisted.internet import reactor, defer

def main():

if __name__ == '__main__':

The output is:

Unhandled error in Deferred:
Traceback (most recent call last):
  File "/home/htj/pack/python/twisted/internet/", line 389, in _continueFiring
    callable(*args, **kwargs)
  File "", line 8, in main
    d.addBoth(lambda _ : reactor.stop())
  File "/home/htj/pack/python/twisted/internet/", line 210, in addBoth
    callbackKeywords=kw, errbackKeywords=kw)
  File "/home/htj/pack/python/twisted/internet/", line 182, in addCallbacks
--- <exception caught here> ---
  File "/home/htj/pack/python/twisted/internet/", line 317, in _runCallbacks
    self.result = callback(self.result, *args, **kw)
  File "", line 4, in main
  File "/home/htj/pack/python/twisted/internet/", line 480, in stop
    raise RuntimeError, "can't stop reactor that isn't running"
exceptions.RuntimeError: can't stop reactor that isn't running

This has worked well in previous versions if twisted. Am I doing anything wrong? If I start doing actual IO the above structure works well.

I've tracked down the change in behaviour to be in internet/ from changeset 20909:

Although I do not really an idea of whats causing it.

I'm not quite sure how to have this as a trial test, it seems to be related to events during startup.

Change History (8)

comment:1 Changed 9 years ago by htj

  • Type changed from enhancement to defect

enhancement -> defect

comment:2 Changed 9 years ago by exarkun

  • Priority changed from normal to high

Apparently running used to be set to 1 after the before phase of the startup event in all cases. Now, if there are no before phase triggers for the startup event which return Deferreds which have not already been called back, running will not be set to 1 until after all before phase startup triggers have run. This includes triggers added via callWhenRunning.

I suppose the old behavior should be restored. Obviously, as part of that, tests for running should be added. Hopefully just as obviously, the exact semantics of running should probably be documented (however, I still think running is a private attribute of the reactor. It is unfortunate that it does not have an _ prefix).

This is a regression introduced by r20909. If conflicts which would make it difficult have not yet been introduced, that revision should be reverted, fixed, re-reviewed, and re-merged.

comment:3 Changed 9 years ago by exarkun

  • Milestone set to Core-2.6

comment:4 Changed 9 years ago by therve

  • Cc therve exarkun added

The great thing (or maybe not), is that it has been fixed in r21395. At least, the reported problem doesn't appear anymore.

comment:5 Changed 9 years ago by exarkun

Some new tests should still be added

comment:6 Changed 8 years ago by therve

  • Milestone twisted-8.0 deleted
  • Priority changed from high to normal

comment:7 Changed 7 years ago by exarkun

  • Resolution set to fixed
  • Status changed from new to closed

This behavior is tested by twisted.internet.test.test_core.SystemEventTestsBuilder.test_stopWhenAlreadyStopped.

comment:8 Changed 5 years ago by <automation>

  • Owner glyph deleted
Note: See TracTickets for help on using tickets.