Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Unified Diff: third_party/twisted_8_1/twisted/internet/iocpreactor/reactor.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/twisted_8_1/twisted/internet/iocpreactor/reactor.py
diff --git a/third_party/twisted_8_1/twisted/internet/iocpreactor/reactor.py b/third_party/twisted_8_1/twisted/internet/iocpreactor/reactor.py
deleted file mode 100644
index 08c4a36b3d2da24e6d5c9b74fba7f48402d0f4d4..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/internet/iocpreactor/reactor.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# -*- test-case-name: twisted.internet.test.test_iocp -*-
-
-# Copyright (c) 2008 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-
-"""
-Reactor that uses IO completion ports
-"""
-
-
-from twisted.internet import base, interfaces, main, error
-from twisted.python import log, failure
-from twisted.internet._dumbwin32proc import Process
-
-from zope.interface import implements
-import socket, sys
-
-from twisted.internet.iocpreactor import iocpsupport as _iocp
-from twisted.internet.iocpreactor.const import WAIT_TIMEOUT
-from twisted.internet.iocpreactor import tcp, udp
-
-from twisted.python.compat import set
-
-MAX_TIMEOUT = 2000 # 2 seconds, see doIteration for explanation
-
-EVENTS_PER_LOOP = 1000 # XXX: what's a good value here?
-
-# keys to associate with normal and waker events
-KEY_NORMAL, KEY_WAKEUP = range(2)
-
-_NO_GETHANDLE = error.ConnectionFdescWentAway(
- 'Handler has no getFileHandle method')
-_NO_FILEDESC = error.ConnectionFdescWentAway('Filedescriptor went away')
-
-
-
-class IOCPReactor(base._SignalReactorMixin, base.ReactorBase):
- implements(interfaces.IReactorTCP, interfaces.IReactorUDP,
- interfaces.IReactorMulticast, interfaces.IReactorProcess)
-
- port = None
-
- def __init__(self):
- base.ReactorBase.__init__(self)
- self.port = _iocp.CompletionPort()
- self.handles = set()
-
-
- def addActiveHandle(self, handle):
- self.handles.add(handle)
-
-
- def removeActiveHandle(self, handle):
- self.handles.discard(handle)
-
-
- def doIteration(self, timeout):
- # This function sits and waits for an IO completion event.
- #
- # There are two requirements: process IO events as soon as they arrive
- # and process ctrl-break from the user in a reasonable amount of time.
- #
- # There are three kinds of waiting.
- # 1) GetQueuedCompletionStatus (self.port.getEvent) to wait for IO
- # events only.
- # 2) Msg* family of wait functions that can stop waiting when
- # ctrl-break is detected (then, I think, Python converts it into a
- # KeyboardInterrupt)
- # 3) *Ex family of wait functions that put the thread into an
- # "alertable" wait state which is supposedly triggered by IO completion
- #
- # 2) and 3) can be combined. Trouble is, my IO completion is not
- # causing 3) to trigger, possibly because I do not use an IO completion
- # callback. Windows is weird.
- # There are two ways to handle this. I could use MsgWaitForSingleObject
- # here and GetQueuedCompletionStatus in a thread. Or I could poll with
- # a reasonable interval. Guess what! Threads are hard.
-
- processed_events = 0
- if timeout is None:
- timeout = MAX_TIMEOUT
- else:
- timeout = min(MAX_TIMEOUT, int(1000*timeout))
- rc, bytes, key, evt = self.port.getEvent(timeout)
- while processed_events < EVENTS_PER_LOOP:
- if rc == WAIT_TIMEOUT:
- break
- if key != KEY_WAKEUP:
- assert key == KEY_NORMAL
- if not evt.ignore:
- log.callWithLogger(evt.owner, self._callEventCallback,
- rc, bytes, evt)
- processed_events += 1
- rc, bytes, key, evt = self.port.getEvent(0)
-
-
- def _callEventCallback(self, rc, bytes, evt):
- owner = evt.owner
- why = None
- try:
- evt.callback(rc, bytes, evt)
- handfn = getattr(owner, 'getFileHandle', None)
- if not handfn:
- why = _NO_GETHANDLE
- elif handfn() == -1:
- why = _NO_FILEDESC
- if why:
- return # ignore handles that were closed
- except:
- why = sys.exc_info()[1]
- log.err()
- if why:
- owner.loseConnection(failure.Failure(why))
-
-
- def installWaker(self):
- pass
-
-
- def wakeUp(self):
- self.port.postEvent(0, KEY_WAKEUP, None)
-
-
- def registerHandle(self, handle):
- self.port.addHandle(handle, KEY_NORMAL)
-
-
- def createSocket(self, af, stype):
- skt = socket.socket(af, stype)
- self.registerHandle(skt.fileno())
- return skt
-
-
- def listenTCP(self, port, factory, backlog=50, interface=''):
- """
- @see: twisted.internet.interfaces.IReactorTCP.listenTCP
- """
- p = tcp.Port(port, factory, backlog, interface, self)
- p.startListening()
- return p
-
-
- def connectTCP(self, host, port, factory, timeout=30, bindAddress=None):
- """
- @see: twisted.internet.interfaces.IReactorTCP.connectTCP
- """
- c = tcp.Connector(host, port, factory, timeout, bindAddress, self)
- c.connect()
- return c
-
-
- def listenUDP(self, port, protocol, interface='', maxPacketSize=8192):
- """
- Connects a given L{DatagramProtocol} to the given numeric UDP port.
-
- @returns: object conforming to L{IListeningPort}.
- """
- p = udp.Port(port, protocol, interface, maxPacketSize, self)
- p.startListening()
- return p
-
-
- def listenMulticast(self, port, protocol, interface='', maxPacketSize=8192,
- listenMultiple=False):
- """
- Connects a given DatagramProtocol to the given numeric UDP port.
-
- EXPERIMENTAL.
-
- @returns: object conforming to IListeningPort.
- """
- p = udp.MulticastPort(port, protocol, interface, maxPacketSize, self,
- listenMultiple)
- p.startListening()
- return p
-
-
- def spawnProcess(self, processProtocol, executable, args=(), env={},
- path=None, uid=None, gid=None, usePTY=0, childFDs=None):
- """
- Spawn a process.
- """
- if uid is not None:
- raise ValueError("Setting UID is unsupported on this platform.")
- if gid is not None:
- raise ValueError("Setting GID is unsupported on this platform.")
- if usePTY:
- raise ValueError("PTYs are unsupported on this platform.")
- if childFDs is not None:
- raise ValueError(
- "Custom child file descriptor mappings are unsupported on "
- "this platform.")
- args, env = self._checkProcessArgs(args, env)
- return Process(self, processProtocol, executable, args, env, path)
-
-
- def removeAll(self):
- res = list(self.handles)
- self.handles.clear()
- return res
-
-
-
-def install():
- r = IOCPReactor()
- main.installReactor(r)
-
-
-__all__ = ['IOCPReactor', 'install']
-

Powered by Google App Engine
This is Rietveld 408576698