diff Objects/object.c @ 44064:00048fedbaa0

Partial fix for bug #1306 Multiple reinitializations of Python 3.0 failed on a system without a hardcoded default fs encoding. The patch makes sure that the default fs encoding is freed and reset to NULL on e.g. Linux. I've also taken the liberty to increase the debugging in Objects/object.c:_Py_ForgetReference(). The method is used to validate the reference chain. Reinitialization still fails in the 3rd round of my test suite: * ob object : <refcnt 0 at 0x821c840> type : str refcount: 0 address : 0x821c840 * op->_ob_prev->_ob_next object : <refcnt 0 at 0x821c840> type : str refcount: 0 address : 0x821c840 * op->_ob_next->_ob_prev object : bytearray(b'') type : bytearray refcount: 1 address : 0x826b838 Fatal Python error: UNREF invalid object
author Christian Heimes <christian@cheimes.de>
date Fri, 30 Nov 2007 10:18:26 +0000
parents f444e259341a
children 86a2679dca46
line wrap: on
line diff
--- a/Objects/object.c	Thu Nov 29 22:35:39 2007 +0000
+++ b/Objects/object.c	Fri Nov 30 10:18:26 2007 +0000
@@ -1532,8 +1532,15 @@
 	if (op->ob_refcnt < 0)
 		Py_FatalError("UNREF negative refcnt");
 	if (op == &refchain ||
-	    op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
+	    op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
+		fprintf(stderr, "* ob\n");
+		_PyObject_Dump(op);
+		fprintf(stderr, "* op->_ob_prev->_ob_next\n");
+		_PyObject_Dump(op->_ob_prev->_ob_next);
+		fprintf(stderr, "* op->_ob_next->_ob_prev\n");
+		_PyObject_Dump(op->_ob_next->_ob_prev);
 		Py_FatalError("UNREF invalid object");
+	}
 #ifdef SLOW_UNREF_CHECK
 	for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
 		if (p == op)