On Saturday 03 July 2010 03:03:53 Anton Yabchinskiy wrote: > So, I need PyGILState_Ensure/PyGILState_Release around the > overridden method call, and PyEval_InitThreads in the module > initialization. Am I right? Is the following code OK?
The code looks OK to me at least, but what's your problem? (You just wrote "does not work"!) Is there still a problem with the code below? If so, I can see potential problems just due to ownership handling, for example you pass &data to the callbacks, but who's the owner of that data? Is it possible that another thread releases the memory while the callback is running? Oh, I see another likely problematic thing: > void > on_data(const Data_Buffer& data) > { > if (override on_data = get_override("on_data")) { > GIL_State_Guard guard; > > on_data(data); > } > default_on_data(data); > } You're calling get_override - although I never used it, I believe it performs some PyObject_GetAttr or similar to check for an overridden method. Remember: As soon as you're dealing with any python objects, you need the GIL! (A common problem is that people don't see _GetItem oder _GetAttr as "running python code", although that's pushing your luck!) HTH, Hans _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig