]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fixed bugs 760475, 953599, and 1519.
authorJosiah Carlson <josiah.carlson@gmail.com>
Mon, 7 Jul 2008 04:51:46 +0000 (04:51 +0000)
committerJosiah Carlson <josiah.carlson@gmail.com>
Mon, 7 Jul 2008 04:51:46 +0000 (04:51 +0000)
Lib/asynchat.py
Lib/asyncore.py
Lib/test/test_asyncore.py

index 1d5fb7f030803596f33733de55b3fc031b7fbb63..8a7176d10c89b1202cbcd90ee477e501bbc14e1a 100644 (file)
@@ -59,7 +59,7 @@ class async_chat (asyncore.dispatcher):
     ac_in_buffer_size       = 4096
     ac_out_buffer_size      = 4096
 
-    def __init__ (self, conn=None):
+    def __init__ (self, sock=None, map=None):
         # for string terminator matching
         self.ac_in_buffer = ''
 
@@ -74,7 +74,7 @@ class async_chat (asyncore.dispatcher):
         # 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")
index 305d8957dea19f4a0a1448ac42c87b80f635e9fe..e06b3b461c9390f8d151e95784cffd46ada0e188 100644 (file)
@@ -99,8 +99,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:
@@ -467,7 +469,7 @@ class dispatcher:
                 ),
             'error'
             )
-        self.close()
+        self.handle_close()
 
     def handle_expt(self):
         self.log_info('unhandled exception', 'warning')
index 48797704f5bbbe7c47d171d1bf0696201af19595..36096ef68782a2e6373735a34101adef610fa5ab 100644 (file)
@@ -38,6 +38,7 @@ class exitingdummy:
         raise asyncore.ExitNow()
 
     handle_write_event = handle_read_event
+    handle_close_event = handle_read_event
     handle_expt_event = handle_read_event
 
 class crashingdummy:
@@ -48,6 +49,7 @@ class crashingdummy:
         raise Exception()
 
     handle_write_event = handle_read_event
+    handle_close_event = handle_read_event
     handle_expt_event = handle_read_event
 
     def handle_error(self):
@@ -117,6 +119,7 @@ class HelperFunctionTests(unittest.TestCase):
                 def __init__(self):
                     self.read = False
                     self.write = False
+                    self.closed = False
                     self.expt = False
 
                 def handle_read_event(self):
@@ -125,6 +128,9 @@ class HelperFunctionTests(unittest.TestCase):
                 def handle_write_event(self):
                     self.write = True
 
+                def handle_close_event(self):
+                    self.closed = True
+
                 def handle_expt_event(self):
                     self.expt = True
 
@@ -167,9 +173,9 @@ class HelperFunctionTests(unittest.TestCase):
 
             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