I'm starting to remember, yes, scripting/python_scripting.h:#define PY_BLOCK_THREADS(name) wxPyBlock_t name = wxPyBeginBlockThreads() scripting/python_scripting.h:#define PY_BLOCK_THREADS(name)
We needed that blocking, because, when using wxpython, If I'm not wrong (and I use to be more often than I like), when using wxpython, the event loop is handled from python itself, that means that at any time we call most probably we're making a concurrent call to python's VM. I think that you not only fixed a bug for windows, but for a broader audience, only that other audiences where not "lucky" enough to get the into the concurrence problems, I misplaced the wxPyBeginBlockThreads, that also needed to protect other calls to python runtimes…. but ok, that's a start, I must re-investigate how that wxPython thing worked…. thanks again Brian!! :) Miguel Angel Ajo http://www.nbee.es +34911407752 skype: ajoajoajo On 11/03/2013, at 00:26, Miguel Angel Ajo Pelayo <[email protected]> wrote: > Awesome!, > > Brian, I'm sorry that I left that gift for you to debug. I really don't > understand the situation yet, It's supposed that > one must block the python VM thread before launching any new call into it. > All the call methods should be > surrounded by the lock, because python VM always run in a single thread, even > if you launch a thread inside, they > won't even run in parallel as the VM can't (one of biggest python failures) > > It clearly seems that also building values, or even using the Py_DECREF to > dereference a created > value needs to be locked too. > > Thanks brian, I must finish something for a deadline tomorrow (taking > longer than expected, and spent more > time on Kicad that I should have spent) but I really want to discover the > underlying reason. > > Miguel Angel Ajo > http://www.nbee.es > +34911407752 > skype: ajoajoajo > > On 10/03/2013, at 23:52, Brian Sidebotham <[email protected]> wrote: > >> Hi Guys, >> >> I have "fixed" the final issue with python scripting on Windows. I've >> attached a patch which fixes the sigsegv problem I see on Windows. >> >> I'd like to discuss it so that I can fully understand why this fixes the >> issue, or if this is simply a kludge that's putting a plaster on a bone >> break. >> >> The issue boiled down to the following code in pcbnew_footprint_wizards.cpp: >> >> /* Time to call the callback */ >> arglist = Py_BuildValue( "(i)", aPage ); >> result = CallMethod( "GetParameterPageName", arglist ); >> Py_DECREF( arglist ); >> >> There was a SIGSEGV in Py_DECREF( arglist ). In Py_DECREF() the code was >> breaking in tupledealloc() (in Objects/tupleobject.c). >> >> The specific issue was in the macro Py_TRASHCAN_SAFE_BEGIN(op) where >> PyThreadState_GET() returns NULL. The next line would SIGSEV. >> >> The PY_BLOCK_THREADS( ) and PY_UNBLOCK_THREADS( ) macro's surrounding the >> python calls appear to fix the thread state issue. >> >> I haven't had a chance to look into wxPyBeginBlockThreads() yet to see >> what's going on. >> >> The trouble is that I don't really understand what is going on. I could do >> with someone versed in python extensions explaining the use of the GIL and >> the PY_BLOCK_THREADS and PY_UNBLOCK_THREADS macros for me so I can >> understand some more. >> >> I've also attached a quick image of the footprint wizard working okay. It >> generates footprints successfully with this patch in place. So at least >> that's something positive! :D >> >> I'm interested to understand what is wrong here. Why does Linux (and >> presumably MAC) work okay without doing this? >> >> Perhaps the Windows build is broken in some other way that shouldn't be >> fixed like this? >> >> At least there is progress. >> >> Best Regards, Brian. >> >> >> <kicad-scripting-windows-footprint-working.jpg><pcbnew_scripting_windows.diff>_______________________________________________ >> Mailing list: https://launchpad.net/~kicad-developers >> Post to : [email protected] >> Unsubscribe : https://launchpad.net/~kicad-developers >> More help : https://help.launchpad.net/ListHelp > _______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp

