diff --git a/doc/environment.rst b/doc/environment.rst index 7761a81..bac62f2 100644 --- a/doc/environment.rst +++ b/doc/environment.rst @@ -19,10 +19,3 @@ EVENTLET_THREADPOOL_SIZE The size of the threadpool in :mod:`~eventlet.tpool`. This is an environment variable because tpool constructs its pool on first use, so any control of the pool size needs to happen before then. - -EVENTLET_TPOOL_DNS - - If set to 'yes', uses :func:`eventlet.tpool.execute` to call - :func:`~socket.gethostbyname` and :func:`~socket.getaddrinfo`, - making them appear non-blocking. This environment variable is - ignored on OS X. diff --git a/eventlet/green/socket.py b/eventlet/green/socket.py index 759e815..095eaaa 100644 --- a/eventlet/green/socket.py +++ b/eventlet/green/socket.py @@ -18,46 +18,9 @@ if os.environ.get("EVENTLET_NO_GREENDNS",'').lower() != "yes": except ImportError, ex: pass -__original_gethostbyname__ = __socket.gethostbyname -# the thread primitives on Darwin have some bugs that make -# it undesirable to use tpool for hostname lookups -_can_use_tpool = ( - os.environ.get("EVENTLET_TPOOL_DNS",'').lower() == "yes" - and not sys.platform.startswith('darwin')) -def _gethostbyname_twisted(name): - from twisted.internet import reactor - from eventlet.twistedutil import block_on as _block_on - return _block_on(reactor.resolve(name)) - -def _gethostbyname_tpool(name): - from eventlet import tpool - return tpool.execute( - __original_gethostbyname__, name) - -if getattr(get_hub(), 'uses_twisted_reactor', None): - gethostbyname = _gethostbyname_twisted -elif greendns: +if greendns: gethostbyname = greendns.gethostbyname -elif _can_use_tpool: - gethostbyname = _gethostbyname_tpool -else: - gethostbyname = __original_gethostbyname__ - - -__original_getaddrinfo__ = __socket.getaddrinfo -def _getaddrinfo_tpool(*args, **kw): - from eventlet import tpool - return tpool.execute( - __original_getaddrinfo__, *args, **kw) - -if greendns: getaddrinfo = greendns.getaddrinfo -elif _can_use_tpool: - getaddrinfo = _getaddrinfo_tpool -else: - getaddrinfo = __original_getaddrinfo__ - -if greendns: gethostbyname_ex = greendns.gethostbyname_ex getnameinfo = greendns.getnameinfo __patched__ = __patched__ + ['gethostbyname_ex', 'getnameinfo'] diff --git a/tests/fork_test.py b/tests/fork_test.py new file mode 100644 index 0000000..61ca717 --- /dev/null +++ b/tests/fork_test.py @@ -0,0 +1,51 @@ +from tests.patcher_test import ProcessBase + + +class ForkTest(ProcessBase): + def test_simple(self): + newmod = ''' +import eventlet +import os +import sys +import signal +mydir = %r +signal_file = os.path.join(mydir, "output.txt") +pid = os.fork() +if (pid != 0): + eventlet.Timeout(10) + try: + port = None + while True: + try: + contents = open(signal_file, "rb").read() + port = int(contents.split()[0]) + break + except (IOError, IndexError, ValueError, TypeError): + eventlet.sleep(0.1) + eventlet.connect(('127.0.0.1', port)) + while True: + try: + contents = open(signal_file, "rb").read() + result = contents.split()[1] + break + except (IOError, IndexError): + eventlet.sleep(0.1) + print 'result', result + finally: + os.kill(pid, signal.SIGTERM) +else: + try: + s = eventlet.listen(('', 0)) + fd = open(signal_file, "wb") + fd.write(str(s.getsockname()[1])) + fd.write("\\n") + fd.flush() + s.accept() + fd.write("done") + fd.flush() + finally: + fd.close() +''' + self.write_to_tempfile("newmod", newmod % self.tempdir) + output, lines = self.launch_subprocess('newmod.py') + self.assertEqual(lines[0], "result done", output)