Ignoring EEXIST in epoll hub on register. Should fix #80.
This commit is contained in:
@@ -44,11 +44,15 @@ class Hub(poll.Hub):
|
|||||||
oldlisteners = bool(self.listeners[READ].get(fileno) or
|
oldlisteners = bool(self.listeners[READ].get(fileno) or
|
||||||
self.listeners[WRITE].get(fileno))
|
self.listeners[WRITE].get(fileno))
|
||||||
listener = BaseHub.add(self, evtype, fileno, cb)
|
listener = BaseHub.add(self, evtype, fileno, cb)
|
||||||
if not oldlisteners:
|
try:
|
||||||
# Means we've added a new listener
|
if not oldlisteners:
|
||||||
self.register(fileno, new=True)
|
# Means we've added a new listener
|
||||||
else:
|
self.register(fileno, new=True)
|
||||||
self.register(fileno, new=False)
|
else:
|
||||||
|
self.register(fileno, new=False)
|
||||||
|
except IOError, ex: # ignore EEXIST, #80
|
||||||
|
if get_errno(ex) != errno.EEXIST:
|
||||||
|
raise
|
||||||
return listener
|
return listener
|
||||||
|
|
||||||
def do_poll(self, seconds):
|
def do_poll(self, seconds):
|
||||||
|
@@ -215,6 +215,42 @@ class TestBadFilenos(LimitedTestCase):
|
|||||||
self.assertRaises(ValueError, select.select, [-1], [], [])
|
self.assertRaises(ValueError, select.select, [-1], [], [])
|
||||||
|
|
||||||
|
|
||||||
|
from tests.patcher_test import ProcessBase
|
||||||
|
class TestFork(ProcessBase):
|
||||||
|
@skip_with_pyevent
|
||||||
|
@skip_with_zmq
|
||||||
|
def test_fork(self):
|
||||||
|
new_mod = """
|
||||||
|
import os
|
||||||
|
import eventlet
|
||||||
|
server = eventlet.listen(('localhost', 12345))
|
||||||
|
t = eventlet.Timeout(0.01)
|
||||||
|
try:
|
||||||
|
new_sock, address = server.accept()
|
||||||
|
except eventlet.Timeout, t:
|
||||||
|
pass
|
||||||
|
|
||||||
|
pid = os.fork()
|
||||||
|
if not pid:
|
||||||
|
t = eventlet.Timeout(0.1)
|
||||||
|
try:
|
||||||
|
new_sock, address = server.accept()
|
||||||
|
except eventlet.Timeout, t:
|
||||||
|
print "accept blocked"
|
||||||
|
|
||||||
|
else:
|
||||||
|
kpid, status = os.wait()
|
||||||
|
assert kpid == pid
|
||||||
|
assert status == 0
|
||||||
|
print "child died ok"
|
||||||
|
"""
|
||||||
|
self.write_to_tempfile("newmod", new_mod)
|
||||||
|
output, lines = self.launch_subprocess('newmod.py')
|
||||||
|
self.assertEqual(len(lines), 3, output)
|
||||||
|
self.assert_("accept blocked" in lines[0])
|
||||||
|
self.assert_("child died ok" in lines[1])
|
||||||
|
|
||||||
|
|
||||||
class Foo(object):
|
class Foo(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user