Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9f2f833

Browse files
committed
Fixed bugs 760475, 953599, and 1519. This is a translation of changelist 64768
to the py3k branch.
1 parent 35bf9bf commit 9f2f833

3 files changed

Lines changed: 14 additions & 6 deletions

File tree

Lib/asynchat.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class async_chat (asyncore.dispatcher):
7777
use_encoding = 0
7878
encoding = 'latin1'
7979

80-
def __init__ (self, conn=None):
80+
def __init__ (self, sock=None, map=None):
8181
# for string terminator matching
8282
self.ac_in_buffer = b''
8383

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

9797
def collect_incoming_data(self, data):
9898
raise NotImplementedError("must be implemented in subclass")

Lib/asyncore.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,10 @@ def readwrite(obj, flags):
9898
obj.handle_read_event()
9999
if flags & select.POLLOUT:
100100
obj.handle_write_event()
101-
if flags & (select.POLLERR | select.POLLHUP | select.POLLNVAL):
101+
if flags & (select.POLLERR | select.POLLNVAL):
102102
obj.handle_expt_event()
103+
if flags & select.POLLHUP:
104+
obj.handle_close_event()
103105
except (ExitNow, KeyboardInterrupt, SystemExit):
104106
raise
105107
except:
@@ -466,7 +468,7 @@ def handle_error(self):
466468
),
467469
'error'
468470
)
469-
self.close()
471+
self.handle_close()
470472

471473
def handle_expt(self):
472474
self.log_info('unhandled exception', 'warning')

Lib/test/test_asyncore.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def handle_read_event(self):
3939
raise asyncore.ExitNow()
4040

4141
handle_write_event = handle_read_event
42+
handle_close_event = handle_read_event
4243
handle_expt_event = handle_read_event
4344

4445
class crashingdummy:
@@ -49,6 +50,7 @@ def handle_read_event(self):
4950
raise Exception()
5051

5152
handle_write_event = handle_read_event
53+
handle_close_event = handle_read_event
5254
handle_expt_event = handle_read_event
5355

5456
def handle_error(self):
@@ -118,6 +120,7 @@ class testobj:
118120
def __init__(self):
119121
self.read = False
120122
self.write = False
123+
self.closed = False
121124
self.expt = False
122125

123126
def handle_read_event(self):
@@ -126,6 +129,9 @@ def handle_read_event(self):
126129
def handle_write_event(self):
127130
self.write = True
128131

132+
def handle_close_event(self):
133+
self.closed = True
134+
129135
def handle_expt_event(self):
130136
self.expt = True
131137

@@ -168,9 +174,9 @@ def handle_error(self):
168174

169175
for flag in (select.POLLERR, select.POLLHUP, select.POLLNVAL):
170176
tobj = testobj()
171-
self.assertEqual(tobj.expt, False)
177+
self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], False)
172178
asyncore.readwrite(tobj, flag)
173-
self.assertEqual(tobj.expt, True)
179+
self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], True)
174180

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

0 commit comments

Comments
 (0)