2011-02-13 3 views
0

J'ai un programme python qui appelle dans une bibliothèque C++, qui souhaite libérer tous les verrous python afin que d'autres threads python puissent s'exécuter.Le PyThreadState * du thread python principal est-il censé être NULL?

En utilisant PyEval_SaveThread et PyEval_ReleaseThread je reçois des erreurs que l'état de fil est NULL:

Fatal Python error: PyEval_SaveThread: NULL tstate 

Cependant, la fonction de niveau inférieur semblent accepter l'état NULL heureusement:

PyThreadState *s; 
s = PyThreadState_Swap(NULL); 
// (now s = 0) 
PyEval_ReleaseLock(); 

// .... 

PyEval_AcquireLock(); 
PyThreadState_Swap(s); 

// everything seems to be just fine :) 

Répondre

2

Réponse: pas, il n'est jamais destiné à être NULL (si c'est le cas, c'est une erreur fatale). Il s'est avéré que c'était parce que je faisais des liens avec deux versions différentes de python, l'une via boost_python, et l'autre directement.

Top Astuce: utiliser ldd ou otool -L pour vérifier ses dépendances de bibliothèque quand des choses drôles qui se passe;)

Questions connexes