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:
Ryan Williams
2009-11-12 16:01:27 -08:00
parent f449272345
commit d6d71f9bee
3 changed files with 38 additions and 7 deletions

View File

@@ -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

View File

@@ -66,11 +66,18 @@ class Hub(BaseHub):
SYSTEM_EXCEPTIONS = self.SYSTEM_EXCEPTIONS SYSTEM_EXCEPTIONS = self.SYSTEM_EXCEPTIONS
for fileno, event in presult: for fileno, event in presult:
try:
listener = None
try: try:
if event & READ_MASK: if event & READ_MASK:
readers[fileno][0](fileno) listener = readers[fileno][0]
if event & WRITE_MASK: if event & WRITE_MASK:
writers[fileno][0](fileno) 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:

View File

@@ -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)
@@ -225,6 +229,27 @@ class TestGreenIo(LimitedTestCase):
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):
def setUp(self): def setUp(self):