diff --git twisted/internet/base.py twisted/internet/base.py
index 69dd3b4..d96bcbf 100644
|
|
|
|
| 471 | 471 | self.running = False |
| 472 | 472 | self._started = False |
| 473 | 473 | self._justStopped = False |
| | 474 | self._startedBefore = False |
| 474 | 475 | # reactor internal readers, e.g. the waker. |
| 475 | 476 | self._internalReaders = set() |
| 476 | 477 | self.waker = None |
| … |
… |
|
| 570 | 571 | "Can't stop reactor that isn't running.") |
| 571 | 572 | self._stopped = True |
| 572 | 573 | self._justStopped = True |
| | 574 | self._startedBefore = True |
| 573 | 575 | |
| 574 | 576 | |
| 575 | 577 | def crash(self): |
| … |
… |
|
| 668 | 670 | """ |
| 669 | 671 | if self._started: |
| 670 | 672 | raise error.ReactorAlreadyRunning() |
| | 673 | if self._startedBefore: |
| | 674 | raise error.ReactorNotRestartable() |
| 671 | 675 | self._started = True |
| 672 | 676 | self._stopped = False |
| 673 | 677 | threadable.registerAsIOThread() |
diff --git twisted/internet/error.py twisted/internet/error.py
index aa40faf..47667c0 100644
|
|
|
|
| 350 | 350 | """ |
| 351 | 351 | |
| 352 | 352 | |
| | 353 | class ReactorNotRestartable(RuntimeError): |
| | 354 | """ |
| | 355 | Error raised when trying to run a reactor which was stopped. |
| | 356 | """ |
| | 357 | |
| | 358 | |
| 353 | 359 | |
| 354 | 360 | class ReactorAlreadyRunning(RuntimeError): |
| 355 | 361 | """ |
diff --git twisted/internet/test/test_core.py twisted/internet/test/test_core.py
index 75592b4..6eb7aaa 100644
|
|
|
|
| 12 | 12 | import inspect |
| 13 | 13 | |
| 14 | 14 | from twisted.internet.abstract import FileDescriptor |
| 15 | | from twisted.internet.error import ReactorAlreadyRunning |
| | 15 | from twisted.internet.error import ReactorAlreadyRunning, ReactorNotRestartable |
| 16 | 16 | from twisted.internet.defer import Deferred |
| 17 | 17 | from twisted.internet.test.reactormixins import ReactorBuilder |
| 18 | 18 | |
| … |
… |
|
| 310 | 310 | self.assertEqual(events, ['crash', ('stop', True)]) |
| 311 | 311 | |
| 312 | 312 | |
| | 313 | def test_runAfterStop(self): |
| | 314 | """ |
| | 315 | C{reactor.run()} raises L{ReactorNotRestartable} when called when |
| | 316 | the reactor is being run after getting stopped priorly. |
| | 317 | """ |
| | 318 | events = [] |
| | 319 | def restart(): |
| | 320 | self.assertRaises(ReactorNotRestartable, reactor.run) |
| | 321 | events.append('tested') |
| | 322 | reactor = self.buildReactor() |
| | 323 | reactor.callWhenRunning(reactor.stop) |
| | 324 | reactor.addSystemEventTrigger('after', 'shutdown', restart) |
| | 325 | reactor.run() |
| | 326 | self.assertEqual(events, ['tested']) |
| | 327 | |
| | 328 | |
| | 329 | |
| 313 | 330 | globals().update(SystemEventTestsBuilder.makeTestCaseClasses()) |
| 314 | 331 | globals().update(ObjectModelIntegrationTest.makeTestCaseClasses()) |