summaryrefslogtreecommitdiffstats
path: root/Include/objimpl.h
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2006-03-26 23:27:58 (GMT)
committerTim Peters <tim.peters@gmail.com>2006-03-26 23:27:58 (GMT)
commitc9d78aa4709f5a0134bfbf280f637d96e7a6cabd (patch)
tree28858dde35c06e2baaedcc99d243ed7d35dd1e70 /Include/objimpl.h
parent1c168d8eebd927d95f069848568262ebc0b90cd6 (diff)
downloadcpython-c9d78aa4709f5a0134bfbf280f637d96e7a6cabd.zip
cpython-c9d78aa4709f5a0134bfbf280f637d96e7a6cabd.tar.gz
cpython-c9d78aa4709f5a0134bfbf280f637d96e7a6cabd.tar.bz2
Years in the making.
objimpl.h, pymem.h: Stop mapping PyMem_{Del, DEL} and PyMem_{Free, FREE} to PyObject_{Free, FREE} in a release build. They're aliases for the system free() now. _subprocess.c/sp_handle_dealloc(): Since the memory was originally obtained via PyObject_NEW, it must be released via PyObject_FREE (or _DEL). pythonrun.c, tokenizer.c, parsermodule.c: I lost count of the number of PyObject vs PyMem mismatches in these -- it's like the specific function called at each site was picked at random, sometimes even with memory obtained via PyMem getting released via PyObject. Changed most to use PyObject uniformly, since the blobs allocated are predictably small in most cases, and obmalloc is generally faster than system mallocs then. If extension modules in real life prove as sloppy as Python's front end, we'll have to revert the objimpl.h + pymem.h part of this patch. Note that no problems will show up in a debug build (all calls still go thru obmalloc then). Problems will show up only in a release build, most likely segfaults.
Diffstat (limited to 'Include/objimpl.h')
-rw-r--r--Include/objimpl.h8
1 files changed, 2 insertions, 6 deletions
diff --git a/Include/objimpl.h b/Include/objimpl.h
index 7c68194..447a56e 100644
--- a/Include/objimpl.h
+++ b/Include/objimpl.h
@@ -101,7 +101,7 @@ PyAPI_FUNC(void) PyObject_Free(void *);
/* Macros */
#ifdef WITH_PYMALLOC
-#ifdef PYMALLOC_DEBUG
+#ifdef PYMALLOC_DEBUG /* WITH_PYMALLOC && PYMALLOC_DEBUG */
PyAPI_FUNC(void *) _PyObject_DebugMalloc(size_t nbytes);
PyAPI_FUNC(void *) _PyObject_DebugRealloc(void *p, size_t nbytes);
PyAPI_FUNC(void) _PyObject_DebugFree(void *p);
@@ -124,11 +124,7 @@ PyAPI_FUNC(void) _PyObject_DebugMallocStats(void);
#else /* ! WITH_PYMALLOC */
#define PyObject_MALLOC PyMem_MALLOC
#define PyObject_REALLOC PyMem_REALLOC
-/* This is an odd one! For backward compatibility with old extensions, the
- PyMem "release memory" functions have to invoke the object allocator's
- free() function. When pymalloc isn't enabled, that leaves us using
- the platform free(). */
-#define PyObject_FREE free
+#define PyObject_FREE PyMem_FREE
#endif /* WITH_PYMALLOC */