Taso uncovered a subtle bug where it'll fail to print keyerror exceptions. Fixed, test written, thanks for the report.
This commit is contained in:
1
AUTHORS
1
AUTHORS
@@ -23,6 +23,7 @@ Linden Lab Contributors
|
|||||||
|
|
||||||
Thanks To
|
Thanks To
|
||||||
---------
|
---------
|
||||||
|
* Taso Du Val, reproing an exception squelching bug, saving children's lives ;-)
|
||||||
* R. Tyler Ballance, bug report on tpool on Windows
|
* R. Tyler Ballance, bug report on tpool on Windows
|
||||||
* Sergey Shepelev, PEP 8 police :-)
|
* Sergey Shepelev, PEP 8 police :-)
|
||||||
* Luci Stanescu, for reporting twisted hub bug
|
* Luci Stanescu, for reporting twisted hub bug
|
||||||
|
@@ -67,10 +67,17 @@ class Hub(BaseHub):
|
|||||||
|
|
||||||
for fileno, event in presult:
|
for fileno, event in presult:
|
||||||
try:
|
try:
|
||||||
if event & READ_MASK:
|
listener = None
|
||||||
readers[fileno][0](fileno)
|
try:
|
||||||
if event & WRITE_MASK:
|
if event & READ_MASK:
|
||||||
writers[fileno][0](fileno)
|
listener = readers[fileno][0]
|
||||||
|
if event & WRITE_MASK:
|
||||||
|
listener = writers[fileno][0]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if listener:
|
||||||
|
listener(fileno)
|
||||||
if event & select.POLLNVAL:
|
if event & select.POLLNVAL:
|
||||||
self.remove_descriptor(fileno)
|
self.remove_descriptor(fileno)
|
||||||
continue
|
continue
|
||||||
@@ -79,8 +86,6 @@ class Hub(BaseHub):
|
|||||||
writers.get(fileno, [])):
|
writers.get(fileno, [])):
|
||||||
for listener in listeners:
|
for listener in listeners:
|
||||||
listener(fileno)
|
listener(fileno)
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
except SYSTEM_EXCEPTIONS:
|
except SYSTEM_EXCEPTIONS:
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
|
@@ -5,6 +5,11 @@ import os
|
|||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
from cStringIO import StringIO
|
||||||
|
except ImportError:
|
||||||
|
from StringIO import StringIO
|
||||||
|
|
||||||
def bufsized(sock, size=1):
|
def bufsized(sock, size=1):
|
||||||
""" Resize both send and receive buffers on a socket.
|
""" Resize both send and receive buffers on a socket.
|
||||||
Useful for testing trampoline. Returns the socket.
|
Useful for testing trampoline. Returns the socket.
|
||||||
@@ -212,7 +217,6 @@ class TestGreenIo(LimitedTestCase):
|
|||||||
client.close()
|
client.close()
|
||||||
server_coro.wait()
|
server_coro.wait()
|
||||||
listener.close()
|
listener.close()
|
||||||
print len(results1), len(results2)
|
|
||||||
self.assert_(len(results1) > 0)
|
self.assert_(len(results1) > 0)
|
||||||
self.assert_(len(results2) > 0)
|
self.assert_(len(results2) > 0)
|
||||||
|
|
||||||
@@ -224,6 +228,27 @@ class TestGreenIo(LimitedTestCase):
|
|||||||
else:
|
else:
|
||||||
sock = api.tcp_listener(('127.0.0.1', 0))
|
sock = api.tcp_listener(('127.0.0.1', 0))
|
||||||
ssl_sock = ssl.wrap_socket(sock)
|
ssl_sock = ssl.wrap_socket(sock)
|
||||||
|
|
||||||
|
def test_exception_squelching(self):
|
||||||
|
server = api.tcp_listener(('0.0.0.0', 0))
|
||||||
|
client = api.connect_tcp(('127.0.0.1', server.getsockname()[1]))
|
||||||
|
client_2, addr = server.accept()
|
||||||
|
|
||||||
|
def hurl(s):
|
||||||
|
s.recv(1)
|
||||||
|
{}[1] # keyerror
|
||||||
|
|
||||||
|
fake = StringIO()
|
||||||
|
orig = sys.stderr
|
||||||
|
sys.stderr = fake
|
||||||
|
try:
|
||||||
|
api.spawn(hurl, client_2)
|
||||||
|
api.sleep(0)
|
||||||
|
client.send(' ')
|
||||||
|
api.sleep(0)
|
||||||
|
finally:
|
||||||
|
sys.stderr = orig
|
||||||
|
self.assert_('Traceback' in fake.getvalue())
|
||||||
|
|
||||||
|
|
||||||
class SSLTest(LimitedTestCase):
|
class SSLTest(LimitedTestCase):
|
||||||
|
Reference in New Issue
Block a user