Skip to content

Commit

Permalink
Fixed bugs 760475, 953599, and 1519. This is a translation of changel…
Browse files Browse the repository at this point in the history
…ist 64768

to the py3k branch.
  • Loading branch information
josiahcarlson committed Jul 7, 2008
1 parent 35bf9bf commit 9f2f833
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
4 changes: 2 additions & 2 deletions Lib/asynchat.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class async_chat (asyncore.dispatcher):
use_encoding = 0
encoding = 'latin1'

def __init__ (self, conn=None):
def __init__ (self, sock=None, map=None):
# for string terminator matching
self.ac_in_buffer = b''

Expand All @@ -92,7 +92,7 @@ def __init__ (self, conn=None):
# we toss the use of the "simple producer" and replace it with
# a pure deque, which the original fifo was a wrapping of
self.producer_fifo = deque()
asyncore.dispatcher.__init__ (self, conn)
asyncore.dispatcher.__init__ (self, sock, map)

def collect_incoming_data(self, data):
raise NotImplementedError("must be implemented in subclass")
Expand Down
6 changes: 4 additions & 2 deletions Lib/asyncore.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,10 @@ def readwrite(obj, flags):
obj.handle_read_event()
if flags & select.POLLOUT:
obj.handle_write_event()
if flags & (select.POLLERR | select.POLLHUP | select.POLLNVAL):
if flags & (select.POLLERR | select.POLLNVAL):
obj.handle_expt_event()
if flags & select.POLLHUP:
obj.handle_close_event()
except (ExitNow, KeyboardInterrupt, SystemExit):
raise
except:
Expand Down Expand Up @@ -466,7 +468,7 @@ def handle_error(self):
),
'error'
)
self.close()
self.handle_close()

def handle_expt(self):
self.log_info('unhandled exception', 'warning')
Expand Down
10 changes: 8 additions & 2 deletions Lib/test/test_asyncore.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def handle_read_event(self):
raise asyncore.ExitNow()

handle_write_event = handle_read_event
handle_close_event = handle_read_event
handle_expt_event = handle_read_event

class crashingdummy:
Expand All @@ -49,6 +50,7 @@ def handle_read_event(self):
raise Exception()

handle_write_event = handle_read_event
handle_close_event = handle_read_event
handle_expt_event = handle_read_event

def handle_error(self):
Expand Down Expand Up @@ -118,6 +120,7 @@ class testobj:
def __init__(self):
self.read = False
self.write = False
self.closed = False
self.expt = False

def handle_read_event(self):
Expand All @@ -126,6 +129,9 @@ def handle_read_event(self):
def handle_write_event(self):
self.write = True

def handle_close_event(self):
self.closed = True

def handle_expt_event(self):
self.expt = True

Expand Down Expand Up @@ -168,9 +174,9 @@ def handle_error(self):

for flag in (select.POLLERR, select.POLLHUP, select.POLLNVAL):
tobj = testobj()
self.assertEqual(tobj.expt, False)
self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], False)
asyncore.readwrite(tobj, flag)
self.assertEqual(tobj.expt, True)
self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], True)

# check that ExitNow exceptions in the object handler method
# bubbles all the way up through asyncore readwrite calls
Expand Down

0 comments on commit 9f2f833

Please sign in to comment.