Crash in python while run from U3 device
Philippe C. Martin
pmartin at snakecard.com
Sat Nov 26 16:48:21 EST 2005
Philippe C. Martin wrote:
> Hi,
>
> I am currently porting some of my applications to U3 (www.u3.com) and I do
> get a crash in ...objects\frameobject.c: PyFrameObject *back =
> tstate->frame.
>
> The point of the current test is to get a python function called on a U3
> device event. (U3 only work with Windows currently).
>
> My C stub callback does get called but crashes when it tries to call the
> python function.
>
>
>
> ***************************
> This is the function that registers the callback (actual dll prototype in
> header):
> ***************************
> static PyObject *s_callback=NULL;
> /******************************************************************/
> /******************************************************************/
> /* HRESULT dapiRegisterCallback ( HSESSION hSession ,wchar_t*
> pszConnectionString ,DAPI_CALLBACK pCallBack,void* pEx ,HCALLBACK*
> hCallback) */
> /******************************************************************/
> /******************************************************************/
>
> static PyObject *Py_dapiRegisterCallback(PyObject *p_self, PyObject
> *p_args)
> {
> HRESULT l_result;
> HSESSION l_hSession;
> wchar_t* l_pszConnectionString;
> PyObject *l_tmp_cb;
> //PyObject cs;
> void* l_pEx;
> HCALLBACK l_hCallback;
>
> if
>
(!PyArg_ParseTuple(p_args,"iuOi",&l_hSession,&l_pszConnectionString,&l_tmp_cb,&l_pEx)
> )
> {
> BAD_PARAM;
> return NULL;
> }
> //l_pszConnectionString = PyObject_Unicode(cs);
> Py_XINCREF(l_tmp_cb);
> Py_XDECREF(s_callback);
> s_callback=l_tmp_cb;
> l_result =
>
dapiRegisterCallback(l_hSession,l_pszConnectionString,Stub_Callback,l_pEx,&l_hCallback);
>
> CHECK_RESULT;
>
> return Py_BuildValue("l",l_hCallback);
>
> }
PS: the crash is in PyFrame_New
Thanks,
Philippe
>
> ***************************************
> This is the stub callback that crashes:
> ***************************************
> void _stdcall Stub_Callback(HDEVICE p_dev, DWORD p_event, void *p_pEx)
> {
> PyObject *l_result;
> PyObject *l_arg_list;
>
> l_arg_list = Py_BuildValue("(iii)", p_dev,p_event,p_pEx);
> l_result = PyEval_CallObject(s_callback, l_arg_list); /*No crash
> if I
> comment this line*/
> Py_DECREF(l_arg_list);
> }
>
>
> *****************************************
> This is the python source
> *****************************************
> (cs, and s have a correct value ... I think )
> import u3
> def mf(a,b,c):
> print 'CB'
>
> h=u3.dapiRegisterCallback(s, cs, mf, 0)
>
>
>
>
> Any help _greatly_ appreciated.
>
> Regards,
>
> Philippe
More information about the Python-list
mailing list