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
This commit is contained in:
Christian Heimes 2007-11-30 10:18:26 +00:00
parent a22e8bdfd9
commit c896700235
4 changed files with 18 additions and 1 deletions

View file

@ -502,6 +502,12 @@ Py_Finalize(void)
/* Cleanup Unicode implementation */
_PyUnicode_Fini();
/* reset file system default encoding */
if (!Py_HasFileSystemDefaultEncoding) {
free((char*)Py_FileSystemDefaultEncoding);
Py_FileSystemDefaultEncoding = NULL;
}
/* XXX Still allocated:
- various static ad-hoc pointers to interned strings
- int and float free list blocks