[Python-checkins] r45312 - in python/trunk: Include/object.h Objects/dictobject.c Objects/object.c Objects/setobject.c Python/pythonrun.c Python/sysmodule.c
armin.rigo
python-checkins at python.org
Wed Apr 12 19:06:06 CEST 2006
Author: armin.rigo
Date: Wed Apr 12 19:06:05 2006
New Revision: 45312
Modified:
python/trunk/Include/object.h
python/trunk/Objects/dictobject.c
python/trunk/Objects/object.c
python/trunk/Objects/setobject.c
python/trunk/Python/pythonrun.c
python/trunk/Python/sysmodule.c
Log:
Ignore the references to the dummy objects used as deleted keys
in dicts and sets when computing the total number of references.
Modified: python/trunk/Include/object.h
==============================================================================
--- python/trunk/Include/object.h (original)
+++ python/trunk/Include/object.h Wed Apr 12 19:06:05 2006
@@ -578,6 +578,9 @@
PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *fname,
int lineno, PyObject *op);
+PyAPI_FUNC(PyObject *) _PyDict_Dummy(void);
+PyAPI_FUNC(PyObject *) _PySet_Dummy(void);
+PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
#define _Py_INC_REFTOTAL _Py_RefTotal++
#define _Py_DEC_REFTOTAL _Py_RefTotal--
#define _Py_REF_DEBUG_COMMA ,
Modified: python/trunk/Objects/dictobject.c
==============================================================================
--- python/trunk/Objects/dictobject.c (original)
+++ python/trunk/Objects/dictobject.c Wed Apr 12 19:06:05 2006
@@ -115,6 +115,14 @@
/* Object used as dummy key to fill deleted entries */
static PyObject *dummy = NULL; /* Initialized by first call to newdictobject() */
+#ifdef Py_REF_DEBUG
+PyObject *
+_PyDict_Dummy(void)
+{
+ return dummy;
+}
+#endif
+
/* forward declarations */
static dictentry *
lookdict_string(dictobject *mp, PyObject *key, long hash);
Modified: python/trunk/Objects/object.c
==============================================================================
--- python/trunk/Objects/object.c (original)
+++ python/trunk/Objects/object.c Wed Apr 12 19:06:05 2006
@@ -5,7 +5,24 @@
#ifdef Py_REF_DEBUG
Py_ssize_t _Py_RefTotal;
-#endif
+
+Py_ssize_t
+_Py_GetRefTotal(void)
+{
+ PyObject *o;
+ Py_ssize_t total = _Py_RefTotal;
+ /* ignore the references to the dummy object of the dicts and sets
+ because they are not reliable and not useful (now that the
+ hash table code is well-tested) */
+ o = _PyDict_Dummy();
+ if (o != NULL)
+ total -= o->ob_refcnt;
+ o = _PySet_Dummy();
+ if (o != NULL)
+ total -= o->ob_refcnt;
+ return total;
+}
+#endif /* Py_REF_DEBUG */
int Py_DivisionWarningFlag;
Modified: python/trunk/Objects/setobject.c
==============================================================================
--- python/trunk/Objects/setobject.c (original)
+++ python/trunk/Objects/setobject.c Wed Apr 12 19:06:05 2006
@@ -16,6 +16,14 @@
/* Object used as dummy key to fill deleted entries */
static PyObject *dummy = NULL; /* Initialized by first call to make_new_set() */
+#ifdef Py_REF_DEBUG
+PyObject *
+_PySet_Dummy(void)
+{
+ return dummy;
+}
+#endif
+
#define INIT_NONZERO_SET_SLOTS(so) do { \
(so)->table = (so)->smalltable; \
(so)->mask = PySet_MINSIZE - 1; \
Modified: python/trunk/Python/pythonrun.c
==============================================================================
--- python/trunk/Python/pythonrun.c (original)
+++ python/trunk/Python/pythonrun.c Wed Apr 12 19:06:05 2006
@@ -34,7 +34,7 @@
#else /* Py_REF_DEBUG */
#define PRINT_TOTAL_REFS() fprintf(stderr, \
"[%" PY_FORMAT_SIZE_T "d refs]\n", \
- _Py_RefTotal)
+ _Py_GetRefTotal())
#endif
extern char *Py_GetPath(void);
Modified: python/trunk/Python/sysmodule.c
==============================================================================
--- python/trunk/Python/sysmodule.c (original)
+++ python/trunk/Python/sysmodule.c Wed Apr 12 19:06:05 2006
@@ -604,10 +604,9 @@
static PyObject *
sys_gettotalrefcount(PyObject *self)
{
- return PyInt_FromSsize_t(_Py_RefTotal);
+ return PyInt_FromSsize_t(_Py_GetRefTotal());
}
-
-#endif /* Py_TRACE_REFS */
+#endif /* Py_REF_DEBUG */
PyDoc_STRVAR(getrefcount_doc,
"getrefcount(object) -> integer\n\
More information about the Python-checkins
mailing list