r51009 - in python/branches/bcannon-sandboxing: Include/Python.h Include/objimpl.h Objects/trackedmalloc.c Python/sysmodule.c configure configure.in pyconfig.h.in

Author: brett.cannon Date: Tue Aug 1 01:27:46 2006 New Revision: 51009 Modified: python/branches/bcannon-sandboxing/Include/Python.h python/branches/bcannon-sandboxing/Include/objimpl.h python/branches/bcannon-sandboxing/Objects/trackedmalloc.c python/branches/bcannon-sandboxing/Python/sysmodule.c python/branches/bcannon-sandboxing/configure python/branches/bcannon-sandboxing/configure.in python/branches/bcannon-sandboxing/pyconfig.h.in Log: Add needed #ifdef protections. Modified: python/branches/bcannon-sandboxing/Include/Python.h ============================================================================== --- python/branches/bcannon-sandboxing/Include/Python.h (original) +++ python/branches/bcannon-sandboxing/Include/Python.h Tue Aug 1 01:27:46 2006 @@ -73,6 +73,13 @@ #if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC) #error "PYMALLOC_DEBUG requires WITH_PYMALLOC" #endif + +#ifdef Py_TRACK_MEMORY +#ifndef HAVE_MALLINFO +#error "Py_TRACK_MEMORY required HAVE_MALLINFO" +#endif /* !HAVE_MALLINFO */ +#endif /* Py_TRACK_MEMORY */ + #include "pymem.h" #include "object.h" Modified: python/branches/bcannon-sandboxing/Include/objimpl.h ============================================================================== --- python/branches/bcannon-sandboxing/Include/objimpl.h (original) +++ python/branches/bcannon-sandboxing/Include/objimpl.h Tue Aug 1 01:27:46 2006 @@ -94,18 +94,20 @@ the object gets initialized via PyObject_{Init, InitVar} after obtaining the raw memory. */ +#ifdef Py_TRACK_MEMORY PyAPI_DATA(unsigned long) Py_ProcessMemUsage; PyAPI_FUNC(PyObject *) Py_MemoryUsage(PyObject *, PyObject *); +PyAPI_FUNC(void *) PyObject_TrackedMalloc(const char *, size_t); +PyAPI_FUNC(void *) PyObject_TrackedRealloc(const char *, void *, size_t); +PyAPI_FUNC(void) PyObject_TrackedFree(const char *, void *); +#endif /* Py_TRACK_MEMORY */ + PyAPI_FUNC(int) PyMalloc_ManagesMemory(void *); PyAPI_FUNC(size_t) PyMalloc_AllocatedSize(void *); PyAPI_FUNC(void *) PyObject_Malloc(size_t); PyAPI_FUNC(void *) PyObject_Realloc(void *, size_t); PyAPI_FUNC(void) PyObject_Free(void *); -PyAPI_FUNC(void *) PyObject_TrackedMalloc(const char *, size_t); -PyAPI_FUNC(void *) PyObject_TrackedRealloc(const char *, void *, size_t); -PyAPI_FUNC(void) PyObject_TrackedFree(const char *, void *); - /* Macros */ #ifdef WITH_PYMALLOC Modified: python/branches/bcannon-sandboxing/Objects/trackedmalloc.c ============================================================================== --- python/branches/bcannon-sandboxing/Objects/trackedmalloc.c (original) +++ python/branches/bcannon-sandboxing/Objects/trackedmalloc.c Tue Aug 1 01:27:46 2006 @@ -1,5 +1,11 @@ #include "Python.h" + +/* Must come after Python.h for pyconfig.h value to be set. */ +#ifdef Py_TRACK_MEMORY + +#ifdef HAVE_MALLINFO #include <malloc.h> +#endif /* Add accountability to memory allocation. @@ -46,6 +52,8 @@ + Raise an error during compilation if required functionality (e.g. mallinfo()) not available for tracking memory, even if requested. + Completely convert ElementTree. ++ Add an adjust function to compliment track/untrack for realloc usage (allows + for future usage of tracking active object counts) */ unsigned long Py_ProcessMemUsage = 0; @@ -161,7 +169,9 @@ void * PyObject_TrackedMalloc(const char *what, size_t nbytes) { +#ifdef HAVE_MALLINFO struct mallinfo before = mallinfo(); +#endif void *allocated = NULL; size_t used = 0; @@ -174,7 +184,9 @@ used = PyMalloc_AllocatedSize(allocated); } else { +#ifdef HAVE_MALLINFO used = mallinfo().uordblks - before.uordblks; +#endif } PyObject_TrackMemory(what, used); @@ -190,7 +202,9 @@ void * PyObject_TrackedRealloc(const char *what, void *to_resize, size_t new_size) { +#ifdef HAVE_MALLINFO struct mallinfo before = mallinfo(); +#endif void *allocated = NULL; size_t size_delta = 0; @@ -207,7 +221,9 @@ size_delta = PyMalloc_AllocatedSize(allocated) - size_delta; } else { +#ifdef HAVE_MALLINFO size_delta = mallinfo().uordblks - before.uordblks; +#endif } PyObject_TrackMemory(what, size_delta); @@ -221,7 +237,9 @@ void PyObject_TrackedFree(const char *what, void *to_free) { +#ifdef HAVE_MALLINFO struct mallinfo before = mallinfo(); +#endif size_t freed = 0; if (PyMalloc_ManagesMemory(to_free)) { @@ -231,8 +249,12 @@ PyObject_Free(to_free); if (!freed) { +#ifdef HAVE_MALLINFO freed = before.uordblks - mallinfo().uordblks; +#endif } PyObject_UntrackMemory(what, freed); } + +#endif /* Py_TRACK_MEMORY */ Modified: python/branches/bcannon-sandboxing/Python/sysmodule.c ============================================================================== --- python/branches/bcannon-sandboxing/Python/sysmodule.c (original) +++ python/branches/bcannon-sandboxing/Python/sysmodule.c Tue Aug 1 01:27:46 2006 @@ -782,7 +782,9 @@ #endif {"settrace", sys_settrace, METH_O, settrace_doc}, {"call_tracing", sys_call_tracing, METH_VARARGS, call_tracing_doc}, +#ifdef Py_TRACK_MEMORY {"memoryusage", Py_MemoryUsage, METH_NOARGS, "XXX"}, +#endif {NULL, NULL} /* sentinel */ }; Modified: python/branches/bcannon-sandboxing/configure ============================================================================== --- python/branches/bcannon-sandboxing/configure (original) +++ python/branches/bcannon-sandboxing/configure Tue Aug 1 01:27:46 2006 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 50891 . +# From configure.in Revision: 50892 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for python 2.5. # @@ -3791,6 +3791,61 @@ echo "${ECHO_T}no" >&6 fi; +echo "$as_me:$LINENO: checking for mallinfo" >&5 +echo $ECHO_N "checking for mallinfo... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <malloc.h> +int +main () +{ +void *x=mallinfo + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MALLINFO 1 +_ACEOF + + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + # XXX Shouldn't the code above that fiddles with BASECFLAGS and OPT be # merged with this chunk of code? @@ -13744,7 +13799,6 @@ echo "$as_me:$LINENO: result: $with_doc_strings" >&5 echo "${ECHO_T}$with_doc_strings" >&6 -# Check for Python-specific malloc support echo "$as_me:$LINENO: checking for --with-tsc" >&5 echo $ECHO_N "checking for --with-tsc... $ECHO_C" >&6 Modified: python/branches/bcannon-sandboxing/configure.in ============================================================================== --- python/branches/bcannon-sandboxing/configure.in (original) +++ python/branches/bcannon-sandboxing/configure.in Tue Aug 1 01:27:46 2006 @@ -740,6 +740,13 @@ fi], [AC_MSG_RESULT(no)]) +AC_MSG_CHECKING(for mallinfo) +AC_TRY_COMPILE([#include <malloc.h>], void *x=mallinfo, + AC_DEFINE(HAVE_MALLINFO, 1, Define if you have the 'mallinfo' function.) + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no) +) + # XXX Shouldn't the code above that fiddles with BASECFLAGS and OPT be # merged with this chunk of code? @@ -2171,7 +2178,6 @@ fi AC_MSG_RESULT($with_doc_strings) -# Check for Python-specific malloc support AC_MSG_CHECKING(for --with-tsc) AC_ARG_WITH(tsc, [ --with(out)-tsc enable/disable timestamp counter profile], [ Modified: python/branches/bcannon-sandboxing/pyconfig.h.in ============================================================================== --- python/branches/bcannon-sandboxing/pyconfig.h.in (original) +++ python/branches/bcannon-sandboxing/pyconfig.h.in Tue Aug 1 01:27:46 2006 @@ -326,6 +326,9 @@ /* Define this if you have the makedev macro. */ #undef HAVE_MAKEDEV +/* Define if you have the 'mallinfo' function. */ +#undef HAVE_MALLINFO + /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE
participants (1)
-
brett.cannon