Added _Py_ResetReferences(), if tracing references.
In _Py_PrintReferences(), no longer suppress once-referenced string.

Add Py_Malloc and friends and PyMem_Malloc and friends (malloc
wrappers for third parties).
diff --git a/Objects/object.c b/Objects/object.c
index 023477f..83829d2 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -570,6 +570,13 @@
 static PyObject refchain = {&refchain, &refchain};
 
 void
+_Py_ResetReferences()
+{
+	refchain._ob_prev = refchain._ob_next = &refchain;
+	_Py_RefTotal = 0;
+}
+
+void
 _Py_NewReference(op)
 	PyObject *op;
 {
@@ -625,10 +632,8 @@
 	FILE *fp;
 {
 	PyObject *op;
-	fprintf(fp, "Remaining objects (except strings referenced once):\n");
+	fprintf(fp, "Remaining objects:\n");
 	for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
-		if (op->ob_refcnt == 1 && PyString_Check(op))
-			continue; /* Will be printed elsewhere */
 		fprintf(fp, "[%d] ", op->ob_refcnt);
 		if (PyObject_Print(op, fp, 0) != 0)
 			PyErr_Clear();
@@ -676,3 +681,79 @@
 
 /* Hack to force loading of abstract.o */
 int (*_Py_abstract_hack) Py_FPROTO((PyObject *)) = &PyObject_Length;
+
+
+/* Malloc wrappers (see mymalloc.h) */
+
+/* The Py_{Malloc,Realloc} wrappers call PyErr_NoMemory() on failure */
+
+ANY *
+Py_Malloc(nbytes)
+	size_t nbytes;
+{
+	ANY *p;
+#if _PyMem_EXTRA > 0
+	if (nbytes == 0)
+		nbytes = _PyMem_EXTRA;
+#endif
+	p = malloc(nbytes);
+	if (p != NULL)
+		return p;
+	else
+		return PyErr_NoMemory();
+}
+
+ANY *
+Py_Realloc(p, nbytes)
+	ANY *p;
+	size_t nbytes;
+{
+#if _PyMem_EXTRA > 0
+	if (nbytes == 0)
+		nbytes = _PyMem_EXTRA;
+#endif
+	p = realloc(p, nbytes);
+	if (p != NULL)
+		return p;
+	else
+		return PyErr_NoMemory();
+}
+
+void
+Py_Free(p)
+	ANY *p;
+{
+	free(p);
+}
+
+/* The PyMem_{Malloc,Realloc} wrappers don't call anything on failure */
+
+ANY *
+PyMem_Malloc(nbytes)
+	size_t nbytes;
+{
+#if _PyMem_EXTRA > 0
+	if (nbytes == 0)
+		nbytes = _PyMem_EXTRA;
+#endif
+	return malloc(nbytes);
+}
+
+ANY *
+PyMem_Realloc(p, nbytes)
+	ANY *p;
+	size_t nbytes;
+{
+#if _PyMem_EXTRA > 0
+	if (nbytes == 0)
+		nbytes = _PyMem_EXTRA;
+#endif
+	return realloc(p, nbytes);
+}
+
+void
+PyMem_Free(p)
+	ANY *p;
+{
+	free(p);
+}