I am using sip to generate python bindings for my c++ library. sip is also used to generate python bindings for the Qt Gui toolkit. The PyEval_*Thread and PyThreadState_* seem to end up with a NULL tstate parameter at different points of execution when I start instantiating more complicated sip-wrapped widget classes along with my own multi-threaded library. At one point, I moved the thread creation code into python (by causing it to simply call a method in my library to execute the thread), and it helped a bit. I'm obviously not looking for help with sip, but it would be nice to get a general overview of what conditions cause a NULL tstate to be passed to these functions. I've posted a few messages on the sip mailing list about this, but the problem seems a little too biased toward the scope of this list for any of them to answer. Cheers!