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
|
||||
---------
|
||||
* Taso Du Val, reproing an exception squelching bug, saving children's lives ;-)
|
||||
* R. Tyler Ballance, bug report on tpool on Windows
|
||||
* Sergey Shepelev, PEP 8 police :-)
|
||||
* Luci Stanescu, for reporting twisted hub bug
|
||||
|
@@ -67,10 +67,17 @@ class Hub(BaseHub):
|
||||
|
||||
for fileno, event in presult:
|
||||
try:
|
||||
if event & READ_MASK:
|
||||
readers[fileno][0](fileno)
|
||||
if event & WRITE_MASK:
|
||||
writers[fileno][0](fileno)
|
||||
listener = None
|
||||
try:
|
||||
if event & READ_MASK:
|
||||
listener = readers[fileno][0]
|
||||
if event & WRITE_MASK:
|
||||
listener = writers[fileno][0]
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
if listener:
|
||||
listener(fileno)
|
||||
if event & select.POLLNVAL:
|
||||
self.remove_descriptor(fileno)
|
||||
continue
|
||||
@@ -79,8 +86,6 @@ class Hub(BaseHub):
|
||||
writers.get(fileno, [])):
|
||||
for listener in listeners:
|
||||
listener(fileno)
|
||||
except KeyError:
|
||||
pass
|
||||
except SYSTEM_EXCEPTIONS:
|
||||
raise
|
||||
except:
|
||||
|
@@ -5,6 +5,11 @@ import os
|
||||
import socket
|
||||
import sys
|
||||
|
||||
try:
|
||||
from cStringIO import StringIO
|
||||
except ImportError:
|
||||
from StringIO import StringIO
|
||||
|
||||
def bufsized(sock, size=1):
|
||||
""" Resize both send and receive buffers on a socket.
|
||||
Useful for testing trampoline. Returns the socket.
|
||||
@@ -212,7 +217,6 @@ class TestGreenIo(LimitedTestCase):
|
||||
client.close()
|
||||
server_coro.wait()
|
||||
listener.close()
|
||||
print len(results1), len(results2)
|
||||
self.assert_(len(results1) > 0)
|
||||
self.assert_(len(results2) > 0)
|
||||
|
||||
@@ -225,6 +229,27 @@ class TestGreenIo(LimitedTestCase):
|
||||
sock = api.tcp_listener(('127.0.0.1', 0))
|
||||
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):
|
||||
def setUp(self):
|
||||
|
Reference in New Issue
Block a user