Index: twisted/internet/test/reactormixins.py =================================================================== --- twisted/internet/test/reactormixins.py (revision 33676) +++ twisted/internet/test/reactormixins.py (working copy) @@ -15,6 +15,7 @@ from twisted.python.reflect import namedAny, fullyQualifiedName from twisted.python import log from twisted.python.failure import Failure +from twisted.internet.interfaces import IReactorTime # Access private APIs. if platform.isWindows(): @@ -77,6 +78,8 @@ "twisted.internet.kqreactor.KQueueReactor", ]) + _reactors = ["twisted.internet.epollstmreactor.EPollSTMReactor"] + reactorFactory = None originalHandler = None requiredInterfaces = None @@ -120,6 +123,10 @@ # branch that fixes it. # # -exarkun + uninstallHandler = getattr(reactor, '_uninstallHandler', None) + if uninstallHandler is not None: + uninstallHandler() + reactor._uninstallHandler() if getattr(reactor, '_internalReaders', None) is not None: for reader in reactor._internalReaders: @@ -127,15 +134,18 @@ reader.connectionLost(None) reactor._internalReaders.clear() - # Here's an extra thing unrelated to wakers but necessary for - # cleaning up after the reactors we make. -exarkun - reactor.disconnectAll() + disconnectAll = getattr(reactor, 'disconnectAll', None) + if disconnectAll is not None: + # Here's an extra thing unrelated to wakers but necessary for + # cleaning up after the reactors we make. -exarkun + disconnectAll() - # It would also be bad if any timed calls left over were allowed to - # run. - calls = reactor.getDelayedCalls() - for c in calls: - c.cancel() + if IReactorTime.providedBy(reactor): + # It would also be bad if any timed calls left over were allowed to + # run. + calls = reactor.getDelayedCalls() + for c in calls: + c.cancel() def buildReactor(self):