[Python-Dev] Possible memory leak in typeobject.c?

Eric Huss ehuss at ironport.com
Fri Jun 25 17:37:16 EDT 2004


While tearing my hair out trying to figure out why my dynamically
allocated type objects weren't getting garbage collected, I noticed that
the tp_new_wrapper object had 1 too many ref counts.

Does the following patch make sense?  Seems fairly straightforward to me.

-Eric
-------------- next part --------------
*** typeobject.c	28 May 2004 18:36:03 -0000	1.3
--- typeobject.c	25 Jun 2004 21:23:15 -0000
***************
*** 3923,3929 ****
  	func = PyCFunction_New(tp_new_methoddef, (PyObject *)type);
  	if (func == NULL)
  		return -1;
! 	return PyDict_SetItemString(type->tp_dict, "__new__", func);
  }
  
  /* Slot wrappers that call the corresponding __foo__ slot.  See comments
--- 3923,3934 ----
  	func = PyCFunction_New(tp_new_methoddef, (PyObject *)type);
  	if (func == NULL)
  		return -1;
! 	if(PyDict_SetItemString(type->tp_dict, "__new__", func)) {
! 		Py_DECREF(func);
! 		return -1;
! 	}
! 	Py_DECREF(func);
! 	return 0;
  }
  
  /* Slot wrappers that call the corresponding __foo__ slot.  See comments


More information about the Python-Dev mailing list