segmentation fault when executing PyImport_ImportModule("sys")

Dietrich Bollmann diresu at web.de
Tue Apr 8 04:31:24 EDT 2008


Hi,

Since some time I get the following segmentation fault in an
application which used to work fine until recently.

I made a backtrace but couldn't find the reason for the segmentaion
fault until now.

In the hope that somebody might have encountered a similar problem or
does understand the backtrace better than me and can explain it I posted
the backtrace here...

At the end of the backtrace I appended some more context concerning the
involved code.

Thanks for your help :)

Dietrich


Here comes the backtrace:

----
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb046ab90 (LWP 9854)]
threadstate_getframe (self=0xb7e8a889) at ../Python/pystate.c:154
154     ../Python/pystate.c: No such file or directory.
        in ../Python/pystate.c
(gdb) bt full
#0  threadstate_getframe (self=0xb7e8a889) at ../Python/pystate.c:154
No locals.
#1  0xb7e8a897 in PyEval_GetGlobals () at ../Python/ceval.c:3340
        current_frame = <value optimized out>
#2  0xb7eaeb67 in PyImport_Import (module_name=0xb7119480)
at ../Python/import.c:2400
        globals = <value optimized out>
        import = <value optimized out>
        builtins = <value optimized out>
        r = <value optimized out>
        silly_list = (PyObject *) 0xb738fb0c
        builtins_str = (PyObject *) 0xb7391c50
        import_str = (PyObject *) 0xb7391fc0
#3  0xb7eaede5 in PyImport_ImportModule (name=0x901504b "sys")
at ../Python/import.c:1903
        pname = (PyObject *) 0xb7119480
        result = (PyObject *) 0x0
#4  0x08996c9f in py_stdouterr_buffer_new () at
source/blender/commandport/blender/src/py_stdouterr_buffer.c:75
        buffer = (py_stdouterr_buffer) 0x94fd428
        func_StringIO = (PyObject *) 0x9152a48
        args_StringIO = (PyObject *) 0x0
#5  0x089967e1 in bcp_blender_handler_new () at
source/blender/commandport/blender/src/bcp_blender.c:130
        handler = (bcp_blender_handler) 0x9810420
#6  0x08998db3 in bcp_handle_client (client_socket=8) at
source/blender/commandport/blender/src/bcp_handle_client.c:73
        debug = 0
        debug3 = 0
        debug4 = 0
        message_handler = (message_handler) 0x97eba10
        blender_handler = (bcp_blender_handler) 0x0
        command = 0x0
        result = 0x9152a48 "%G�%@016\025\th%G��%@@\\%G�%@022v#\b
\"v#\b%G��%@v#\bRv#\bbv#\brv#\b\202v#\b\222v#\b%G�%@v#\b%G�%@v#\b`
\032%G�%@020\026%G���%@#\b%G�%@#\b\002w#\b\022w#
\b\"w#\b2w#\bBw#\bRw#\bbw#\brw#\b\202w#\b\222w#\b%G�%@w#\b%G�%@w#
\bp#p%G��%@#\b"
        package_number = -1216545219
#7  0x08998d60 in bcp_client_thread (args=0x0) at
source/blender/commandport/blender/src/bcp_server.c:164
        targs = (struct bcp_client_thread_args *) 0x0
        client_socket = 8
        client_thread = 2957421456
#8  0xb76b04fb in start_thread () from /lib/i686/cmov/libpthread.so.0
No symbol table info available.
#9  0xb77c2d7e in clone () from /lib/i686/cmov/libc.so.6
No symbol table info available.
(gdb) q
The program is running.  Exit anyway? (y or n) y
---

and here some informations about its context:

Python-2.4.4/Python/ceval.c

line 3340: PyFrameObject *current_frame = PyEval_GetFrame();

context:
---
PyObject *
PyEval_GetGlobals(void)
{
	PyFrameObject *current_frame = PyEval_GetFrame();
	if (current_frame == NULL)
		return NULL;
	else
		return current_frame->f_globals;
}
---

Python-2.4.4/Python/pystate.c

lign 154: {

context:
---
/* Default implementation for _PyThreadState_GetFrame */
static struct _frame *
threadstate_getframe(PyThreadState *self)
{
	return self->frame;
}
---

Python-2.4.4/Python/import.c
lign 2400: globals = PyEval_GetGlobals();

context:
---
PyObject *
PyImport_Import(PyObject *module_name)
{
	...
	/* Get the builtins from current globals */
	globals = PyEval_GetGlobals();
	if (globals != NULL) {
	        Py_INCREF(globals);
		builtins = PyObject_GetItem(globals, builtins_str);
		if (builtins == NULL)
			goto err;
	}
	...
}
---

Python-2.4.4/Python/import.c
lign 1903:	result = PyImport_Import(pname);

context:
---
PyObject *
PyImport_ImportModule(char *name)
{
	PyObject *pname;
	PyObject *result;

	pname = PyString_FromString(name);
	if (pname == NULL)
		return NULL;
	result = PyImport_Import(pname);
	Py_DECREF(pname);
	return result;
}
---

source/blender/commandport/blender/src/py_stdouterr_buffer.c
lign 75:    buffer->mod_sys       = PyImport_ImportModule("sys");

context:
---
/**
   Make a new python io buffer.
*/
py_stdouterr_buffer py_stdouterr_buffer_new()
{
	py_stdouterr_buffer buffer;
	buffer = (py_stdouterr_buffer)
malloc(sizeof(py_stdouterr_buffer_struct));

	if (buffer == NULL) {
		fprintf(stderr, "Couldn't allocate memory for new py_stdouterr_buffer!
\n");
		exit(ERROR_MEMORY);
	}

    buffer->mod_sys       = PyImport_ImportModule("sys");
    buffer->mod_cStringIO = PyImport_ImportModule("cStringIO");
	
    /* store stdout and stderr */
	buffer->stdout_obj = PyObject_GetAttrString(buffer->mod_sys, "stdout");
	buffer->stderr_obj = PyObject_GetAttrString(buffer->mod_sys, "stderr");

    /* make new string buffer for stdout and stderr */
    PyObject *func_StringIO, *args_StringIO;
	func_StringIO = PyObject_GetAttrString(buffer->mod_cStringIO,
"StringIO");
    args_StringIO = Py_BuildValue("()");
    buffer->outbuf_obj = PyEval_CallObject(func_StringIO,
args_StringIO);
    buffer->errbuf_obj = PyEval_CallObject(func_StringIO,
args_StringIO);
    Py_DECREF(args_StringIO);
    Py_DECREF(func_StringIO);

	return buffer;
}
---









More information about the Python-list mailing list