More Windows compatibility changes for EVT-37

This commit is contained in:
Ryan Williams
2009-08-14 16:44:28 -07:00
parent 2f813a0bdf
commit b0befa0f32
2 changed files with 20 additions and 13 deletions

View File

@@ -68,8 +68,10 @@ def wait_on_children():
def sig_child(signal, frame): def sig_child(signal, frame):
from eventlet import api from eventlet import api
api.call_after_global(0, wait_on_children) api.call_after_global(0, wait_on_children)
signal.signal(signal.SIGCHLD, sig_child) try:
signal.signal(signal.SIGCHLD, sig_child)
except AttributeError:
pass # Windows
def _add_child_pobj(pobj): def _add_child_pobj(pobj):
"""Add the given popen4 object to the list of child """Add the given popen4 object to the list of child

View File

@@ -47,9 +47,11 @@ __original_gethostbyname__ = socket.gethostbyname
__original_getaddrinfo__ = socket.getaddrinfo __original_getaddrinfo__ = socket.getaddrinfo
try: try:
__original_fromfd__ = socket.fromfd __original_fromfd__ = socket.fromfd
__original_fork__ = os.fork
except AttributeError: except AttributeError:
# Windows # Windows
__original_fromfd__ = None __original_fromfd__ = None
__original_fork__ = None
def tcp_socket(): def tcp_socket():
s = __original_socket__(socket.AF_INET, socket.SOCK_STREAM) s = __original_socket__(socket.AF_INET, socket.SOCK_STREAM)
@@ -100,16 +102,19 @@ def wrap_socket_with_coroutine_socket(use_thread_pool=True):
socket.ssl = wrap_ssl_obj socket.ssl = wrap_ssl_obj
if use_thread_pool: if use_thread_pool:
from eventlet import tpool try:
def new_gethostbyname(*args, **kw): from eventlet import tpool
return tpool.execute( def new_gethostbyname(*args, **kw):
__original_gethostbyname__, *args, **kw) return tpool.execute(
socket.gethostbyname = new_gethostbyname __original_gethostbyname__, *args, **kw)
socket.gethostbyname = new_gethostbyname
def new_getaddrinfo(*args, **kw): def new_getaddrinfo(*args, **kw):
return tpool.execute( return tpool.execute(
__original_getaddrinfo__, *args, **kw) __original_getaddrinfo__, *args, **kw)
socket.getaddrinfo = new_getaddrinfo socket.getaddrinfo = new_getaddrinfo
except ImportError:
pass # Windows
if __original_fromfd__ is not None: if __original_fromfd__ is not None:
def new_fromfd(*args, **kw): def new_fromfd(*args, **kw):
@@ -124,7 +129,6 @@ __original_fdopen__ = os.fdopen
__original_read__ = os.read __original_read__ = os.read
__original_write__ = os.write __original_write__ = os.write
__original_waitpid__ = os.waitpid __original_waitpid__ = os.waitpid
__original_fork__ = os.fork
## TODO wrappings for popen functions? not really needed since Process object exists? ## TODO wrappings for popen functions? not really needed since Process object exists?
@@ -171,7 +175,8 @@ def wrap_pipes_with_coroutine_pipes():
os.fdopen = new_fdopen os.fdopen = new_fdopen
os.read = new_read os.read = new_read
os.write = new_write os.write = new_write
os.fork = new_fork if __original_fork is not None:
os.fork = new_fork
os.waitpid = new_waitpid os.waitpid = new_waitpid
__original_select__ = select.select __original_select__ = select.select