Hi all,

Python 2.5 has tightened up the way it handles memory
allocation, and there's a mis-match in the way that
if_python.c handles memory allocation which worked
with earlier Python versions but causes vim to
seg-fault with 2.5.  Essentially, PyMem_DEL shouldn't
be paired with PyObject allocations--they should use
Py_DECREF.

Since every PyMem_DEL in if_python.c is on a PyObject
*, they should all be replaced with Py_DECREF.

This should be safe with earlier python versions as
well as with 2.5 (I've tested with 2.3 and 2.5).

Patch attached, though a simple
%s/PyMem_DEL/Py_DECREF/ is fine.

Thanks for your time,

Sumner

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 
--- vim70/src/if_python.c	2006-04-30 11:31:36.000000000 -0400
+++ vim-new/src/if_python.c	2006-09-19 13:10:26.049857626 -0400
@@ -1463,7 +1463,7 @@
     if (this->buf && this->buf != INVALID_BUFFER_VALUE)
 	this->buf->b_python_ref = NULL;
 
-    PyMem_DEL(self);
+    Py_DECREF(self);
 }
 
     static PyObject *
@@ -1674,7 +1674,7 @@
     bufr = (BufferObject *)BufferNew(buf);
     if (bufr == NULL)
     {
-	PyMem_DEL(self);
+	Py_DECREF(self);
 	return NULL;
     }
     Py_INCREF(bufr);
@@ -1690,7 +1690,7 @@
 RangeDestructor(PyObject *self)
 {
     Py_DECREF(((RangeObject *)(self))->buf);
-    PyMem_DEL(self);
+    Py_DECREF(self);
 }
 
     static PyObject *
@@ -1944,7 +1944,7 @@
     if (this->win && this->win != INVALID_WINDOW_VALUE)
 	this->win->w_python_ref = NULL;
 
-    PyMem_DEL(self);
+    Py_DECREF(self);
 }
 
     static int

Reply via email to