| Index: third_party/twisted_8_1/twisted/internet/selectreactor.py
 | 
| diff --git a/third_party/twisted_8_1/twisted/internet/selectreactor.py b/third_party/twisted_8_1/twisted/internet/selectreactor.py
 | 
| deleted file mode 100644
 | 
| index 0d79e55fb3a4f77a087642fed8fa467f61147382..0000000000000000000000000000000000000000
 | 
| --- a/third_party/twisted_8_1/twisted/internet/selectreactor.py
 | 
| +++ /dev/null
 | 
| @@ -1,204 +0,0 @@
 | 
| -# -*- test-case-name: twisted.test.test_internet -*-
 | 
| -# Copyright (c) 2001-2007 Twisted Matrix Laboratories.
 | 
| -# See LICENSE for details.
 | 
| -
 | 
| -
 | 
| -"""
 | 
| -Select reactor
 | 
| -
 | 
| -Maintainer: U{Itamar Shtull-Trauring<mailto:twisted@itamarst.org>}
 | 
| -"""
 | 
| -
 | 
| -from time import sleep
 | 
| -import sys
 | 
| -import select
 | 
| -from errno import EINTR, EBADF
 | 
| -
 | 
| -from zope.interface import implements
 | 
| -
 | 
| -from twisted.internet.interfaces import IReactorFDSet
 | 
| -from twisted.internet import error
 | 
| -from twisted.internet import posixbase
 | 
| -from twisted.python import log
 | 
| -from twisted.python.runtime import platformType
 | 
| -
 | 
| -
 | 
| -def win32select(r, w, e, timeout=None):
 | 
| -    """Win32 select wrapper."""
 | 
| -    if not (r or w):
 | 
| -        # windows select() exits immediately when no sockets
 | 
| -        if timeout is None:
 | 
| -            timeout = 0.01
 | 
| -        else:
 | 
| -            timeout = min(timeout, 0.001)
 | 
| -        sleep(timeout)
 | 
| -        return [], [], []
 | 
| -    # windows doesn't process 'signals' inside select(), so we set a max
 | 
| -    # time or ctrl-c will never be recognized
 | 
| -    if timeout is None or timeout > 0.5:
 | 
| -        timeout = 0.5
 | 
| -    r, w, e = select.select(r, w, w, timeout)
 | 
| -    return r, w + e, []
 | 
| -
 | 
| -if platformType == "win32":
 | 
| -    _select = win32select
 | 
| -else:
 | 
| -    _select = select.select
 | 
| -
 | 
| -# Exceptions that doSelect might return frequently
 | 
| -_NO_FILENO = error.ConnectionFdescWentAway('Handler has no fileno method')
 | 
| -_NO_FILEDESC = error.ConnectionFdescWentAway('Filedescriptor went away')
 | 
| -
 | 
| -class SelectReactor(posixbase.PosixReactorBase):
 | 
| -    """
 | 
| -    A select() based reactor - runs on all POSIX platforms and on Win32.
 | 
| -
 | 
| -    @ivar _reads: A dictionary mapping L{FileDescriptor} instances to arbitrary
 | 
| -        values (this is essentially a set).  Keys in this dictionary will be
 | 
| -        checked for read events.
 | 
| -
 | 
| -    @ivar _writes: A dictionary mapping L{FileDescriptor} instances to
 | 
| -        arbitrary values (this is essentially a set).  Keys in this dictionary
 | 
| -        will be checked for writability.
 | 
| -    """
 | 
| -    implements(IReactorFDSet)
 | 
| -
 | 
| -    def __init__(self):
 | 
| -        """
 | 
| -        Initialize file descriptor tracking dictionaries and the base class.
 | 
| -        """
 | 
| -        self._reads = {}
 | 
| -        self._writes = {}
 | 
| -        posixbase.PosixReactorBase.__init__(self)
 | 
| -
 | 
| -
 | 
| -    def _preenDescriptors(self):
 | 
| -        log.msg("Malformed file descriptor found.  Preening lists.")
 | 
| -        readers = self._reads.keys()
 | 
| -        writers = self._writes.keys()
 | 
| -        self._reads.clear()
 | 
| -        self._writes.clear()
 | 
| -        for selDict, selList in ((self._reads, readers),
 | 
| -                                 (self._writes, writers)):
 | 
| -            for selectable in selList:
 | 
| -                try:
 | 
| -                    select.select([selectable], [selectable], [selectable], 0)
 | 
| -                except Exception, e:
 | 
| -                    log.msg("bad descriptor %s" % selectable)
 | 
| -                    self._disconnectSelectable(selectable, e, False)
 | 
| -                else:
 | 
| -                    selDict[selectable] = 1
 | 
| -
 | 
| -
 | 
| -    def doSelect(self, timeout):
 | 
| -        """
 | 
| -        Run one iteration of the I/O monitor loop.
 | 
| -
 | 
| -        This will run all selectables who had input or output readiness
 | 
| -        waiting for them.
 | 
| -        """
 | 
| -        while 1:
 | 
| -            try:
 | 
| -                r, w, ignored = _select(self._reads.keys(),
 | 
| -                                        self._writes.keys(),
 | 
| -                                        [], timeout)
 | 
| -                break
 | 
| -            except ValueError, ve:
 | 
| -                # Possibly a file descriptor has gone negative?
 | 
| -                log.err()
 | 
| -                self._preenDescriptors()
 | 
| -            except TypeError, te:
 | 
| -                # Something *totally* invalid (object w/o fileno, non-integral
 | 
| -                # result) was passed
 | 
| -                log.err()
 | 
| -                self._preenDescriptors()
 | 
| -            except (select.error, IOError), se:
 | 
| -                # select(2) encountered an error
 | 
| -                if se.args[0] in (0, 2):
 | 
| -                    # windows does this if it got an empty list
 | 
| -                    if (not self._reads) and (not self._writes):
 | 
| -                        return
 | 
| -                    else:
 | 
| -                        raise
 | 
| -                elif se.args[0] == EINTR:
 | 
| -                    return
 | 
| -                elif se.args[0] == EBADF:
 | 
| -                    self._preenDescriptors()
 | 
| -                else:
 | 
| -                    # OK, I really don't know what's going on.  Blow up.
 | 
| -                    raise
 | 
| -        _drdw = self._doReadOrWrite
 | 
| -        _logrun = log.callWithLogger
 | 
| -        for selectables, method, fdset in ((r, "doRead", self._reads),
 | 
| -                                           (w,"doWrite", self._writes)):
 | 
| -            for selectable in selectables:
 | 
| -                # if this was disconnected in another thread, kill it.
 | 
| -                # ^^^^ --- what the !@#*?  serious!  -exarkun
 | 
| -                if selectable not in fdset:
 | 
| -                    continue
 | 
| -                # This for pausing input when we're not ready for more.
 | 
| -                _logrun(selectable, _drdw, selectable, method, dict)
 | 
| -
 | 
| -    doIteration = doSelect
 | 
| -
 | 
| -    def _doReadOrWrite(self, selectable, method, dict):
 | 
| -        try:
 | 
| -            why = getattr(selectable, method)()
 | 
| -            handfn = getattr(selectable, 'fileno', None)
 | 
| -            if not handfn:
 | 
| -                why = _NO_FILENO
 | 
| -            elif handfn() == -1:
 | 
| -                why = _NO_FILEDESC
 | 
| -        except:
 | 
| -            why = sys.exc_info()[1]
 | 
| -            log.err()
 | 
| -        if why:
 | 
| -            self._disconnectSelectable(selectable, why, method=="doRead")
 | 
| -
 | 
| -    def addReader(self, reader):
 | 
| -        """
 | 
| -        Add a FileDescriptor for notification of data available to read.
 | 
| -        """
 | 
| -        self._reads[reader] = 1
 | 
| -
 | 
| -    def addWriter(self, writer):
 | 
| -        """
 | 
| -        Add a FileDescriptor for notification of data available to write.
 | 
| -        """
 | 
| -        self._writes[writer] = 1
 | 
| -
 | 
| -    def removeReader(self, reader):
 | 
| -        """
 | 
| -        Remove a Selectable for notification of data available to read.
 | 
| -        """
 | 
| -        if reader in self._reads:
 | 
| -            del self._reads[reader]
 | 
| -
 | 
| -    def removeWriter(self, writer):
 | 
| -        """
 | 
| -        Remove a Selectable for notification of data available to write.
 | 
| -        """
 | 
| -        if writer in self._writes:
 | 
| -            del self._writes[writer]
 | 
| -
 | 
| -    def removeAll(self):
 | 
| -        return self._removeAll(self._reads, self._writes)
 | 
| -
 | 
| -
 | 
| -    def getReaders(self):
 | 
| -        return self._reads.keys()
 | 
| -
 | 
| -
 | 
| -    def getWriters(self):
 | 
| -        return self._writes.keys()
 | 
| -
 | 
| -
 | 
| -
 | 
| -def install():
 | 
| -    """Configure the twisted mainloop to be run using the select() reactor.
 | 
| -    """
 | 
| -    reactor = SelectReactor()
 | 
| -    from twisted.internet.main import installReactor
 | 
| -    installReactor(reactor)
 | 
| -
 | 
| -__all__ = ['install']
 | 
| 
 |