multi-threaded c++ callback problem

t.buehler t.buehler at codeforge.ch
Thu May 11 14:10:52 EDT 2006


hi all,

i'm building a wrapper for a multi-threaded c++ library to use it in python. 
everything works fine except the callback.

the c++ code to call the python function:
//-----------------------------------------------------------//
void pyCallEventCallback(  CALL hCall, 
                                    LINE hLine, 
                                    CALLSTATE_MAJOR eMajor,
                                    CALLSTATE_MINOR eMinor,  
                                    PyObject* def )
{
    if( !PyCallable_Check( def ) ) 
    {
        PyErr_SetString( PyExc_TypeError, "Need a callable object!" );
        return;
    }
    printf( "EventCallback hCall: %i, hLine: %i, eMajor: %i, eMinor: %i\n", hCall, hLine, eMajor, eMinor);
    PyObject* arglist = Py_BuildValue("(iiii)", hCall, hLine, eMajor, eMinor);

    // if i comment out next  line it works!
    PyEval_CallObject( def, arglist ); 

    Py_XDECREF(arglist);    
}
//-----------------------------------------------------------//

the python callback function looks like this:
//-----------------------------------------------------------//
def callback( *args ):
    print "callback:", args
//-----------------------------------------------------------//

the soutput i get looks like this:

EventCallback hCall: 1, hLine: 1, eMajor: 2000, eMinor: 2001
callback: ( 1, 1, 2000, 2001 )
EventCallback hCall: 1, hLine: 1, eMajor: 2500, eMinor: 2501
callback: ( 1, 1, 2500, 2501 )
EventCallback hCall: 1, hLine: 1, eMajor: 8000, eMinor: 8001
an then instead of: callback: ( 1, 1, 8000, 8001)
it crashes

there are no other python interactions between the callback calls.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20060511/b4341fa7/attachment.html>


More information about the Python-list mailing list