]> granicus.if.org Git - python/commitdiff
Merged revisions 65677-65678,65683 via svnmerge from
authorMartin v. Löwis <martin@v.loewis.de>
Thu, 14 Aug 2008 20:32:30 +0000 (20:32 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Thu, 14 Aug 2008 20:32:30 +0000 (20:32 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r65677 | martin.v.loewis | 2008-08-14 17:54:27 +0200 (Do, 14 Aug 2008) | 3 lines

  Make obj an owned reference in Py_buffer; this checkin
  was missing from the patch for #3139.
........
  r65678 | martin.v.loewis | 2008-08-14 17:56:07 +0200 (Do, 14 Aug 2008) | 2 lines

  Properly INCREF reference in Py_buffer.
........
  r65683 | martin.v.loewis | 2008-08-14 22:12:06 +0200 (Do, 14 Aug 2008) | 2 lines

  Fix memory leak: Always DECREF obj in PyBuffer_Release.
........

Objects/abstract.c

index 6b73acad10ce104779f2dacf1e46924a4f7ae1ec..8f7083d72d95cd36bdcfc939ab5e6ea972331c9d 100644 (file)
@@ -670,6 +670,8 @@ PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len,
        }
 
        view->obj = obj;
+       if (obj)
+               Py_INCREF(obj);
        view->buf = buf;
        view->len = len;
        view->readonly = readonly;
@@ -693,11 +695,10 @@ void
 PyBuffer_Release(Py_buffer *view)
 {
        PyObject *obj = view->obj;
-       if (!obj || !Py_TYPE(obj)->tp_as_buffer || !Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer)
-               /* Unmanaged buffer */
-               return;
-       Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer(obj, view);
-       
+       if (obj && Py_TYPE(obj)->tp_as_buffer && Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer)
+               Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer(obj, view);
+       Py_XDECREF(obj);
+       view->obj = NULL;
 }
 
 PyObject *