[Python-checkins] cpython: overlapped.c: Fix usage of the union

victor.stinner python-checkins at python.org
Thu Jan 30 19:07:03 CET 2014


http://hg.python.org/cpython/rev/73dbb884eb09
changeset:   88837:73dbb884eb09
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Thu Jan 30 19:06:44 2014 +0100
summary:
  overlapped.c: Fix usage of the union

* read_buffer can only be used for TYPE_READ and TYPE_ACCEPT types
* write_buffer can only be used for TYPE_WRITE type

files:
  Modules/overlapped.c |  20 +++++++++++---------
  1 files changed, 11 insertions(+), 9 deletions(-)


diff --git a/Modules/overlapped.c b/Modules/overlapped.c
--- a/Modules/overlapped.c
+++ b/Modules/overlapped.c
@@ -45,9 +45,9 @@
     /* Type of operation */
     DWORD type;
     union {
-        /* Buffer used for reading (optional) */
+        /* Buffer used for reading: TYPE_READ and TYPE_ACCEPT */
         PyObject *read_buffer;
-        /* Buffer used for writing (optional) */
+        /* Buffer used for writing: TYPE_WRITE */
         Py_buffer write_buffer;
     };
 } OverlappedObject;
@@ -568,13 +568,15 @@
     if (self->overlapped.hEvent != NULL)
         CloseHandle(self->overlapped.hEvent);
 
-    if (self->write_buffer.obj)
-        PyBuffer_Release(&self->write_buffer);
-
     switch (self->type) {
-        case TYPE_READ:
-        case TYPE_ACCEPT:
-            Py_CLEAR(self->read_buffer);
+    case TYPE_READ:
+    case TYPE_ACCEPT:
+        Py_CLEAR(self->read_buffer);
+        break;
+    case TYPE_WRITE:
+        if (self->write_buffer.obj)
+            PyBuffer_Release(&self->write_buffer);
+        break;
     }
     PyObject_Del(self);
     SetLastError(olderr);
@@ -648,7 +650,7 @@
         case ERROR_MORE_DATA:
             break;
         case ERROR_BROKEN_PIPE:
-            if (self->read_buffer != NULL)
+            if ((self->type == TYPE_READ || self->type == TYPE_ACCEPT) && self->read_buffer != NULL)
                 break;
             /* fall through */
         default:

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list