[Python-checkins] r69659 - in python/branches/io-c/Modules: _iomodule.h io.c
benjamin.peterson
python-checkins at python.org
Mon Feb 16 03:55:48 CET 2009
Author: benjamin.peterson
Date: Mon Feb 16 03:55:48 2009
New Revision: 69659
Log:
fix segfault on initialization failing
Modified:
python/branches/io-c/Modules/_iomodule.h
python/branches/io-c/Modules/io.c
Modified: python/branches/io-c/Modules/_iomodule.h
==============================================================================
--- python/branches/io-c/Modules/_iomodule.h (original)
+++ python/branches/io-c/Modules/_iomodule.h Mon Feb 16 03:55:48 2009
@@ -96,6 +96,7 @@
extern PyModuleDef _PyIO_Module;
typedef struct {
+ int initialized;
PyObject *os_module;
PyObject *locale_module;
Modified: python/branches/io-c/Modules/io.c
==============================================================================
--- python/branches/io-c/Modules/io.c (original)
+++ python/branches/io-c/Modules/io.c Mon Feb 16 03:55:48 2009
@@ -560,14 +560,19 @@
static int
iomodule_traverse(_PyIO_State *mod, visitproc visit, void *arg) {
+ if (!mod->initialized)
+ return 0;
Py_VISIT(mod->os_module);
if (mod->locale_module != NULL)
Py_VISIT(mod->locale_module);
+ Py_VISIT(mod->unsupported_operation);
return 0;
}
static int
iomodule_clear(_PyIO_State *mod) {
+ if (!mod->initialized)
+ return 0;
Py_CLEAR(mod->os_module);
if (mod->locale_module != NULL)
Py_CLEAR(mod->locale_module);
@@ -605,7 +610,7 @@
PyInit__io(void)
{
PyObject *m = PyModule_Create(&_PyIO_Module);
- _PyIO_State *state;
+ _PyIO_State *state = NULL;
PyTypeObject *base;
if (m == NULL)
goto fail;
@@ -763,9 +768,15 @@
if (!(_PyIO_empty_bytes = PyBytes_FromStringAndSize(NULL, 0)))
goto fail;
+ state->initialized = 1;
+
return m;
fail:
+ if (state != NULL) {
+ Py_XDECREF(state->os_module);
+ Py_XDECREF(state->unsupported_operation);
+ }
Py_XDECREF(m);
return NULL;
}
More information about the Python-checkins
mailing list