[API C/Python] Assertion Failed : gc->gc.gc_refs != 0
Bien le bonjour !
Je vous fais un petit topo : j'essaye non sans peine de faire de l'embedding python dans une appli C++.
J'ai donc dans mon appli une fonction qui est appel� plusieurs fois de suite. Cette fonction allant chercher des informations dans plusieurs scripts pythons.
Pour une meilleur compr�hension, voici le code de la fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| int CPluginManager::GetInfo(int count, CString& result)
{
PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *pInfo, *pResult;
// On modifie le PATH de l'interpréteur Python pour qu'il aille chercher les plugins où il faut
PySys_SetPath("..\\Plugin;..\\lib;..\\lib\\site-packages");
pName = PyString_FromString((CStringA)vPluginAdr[count]);
// Error checking of pName left out
pModule = PyImport_Import(pName);
Py_XDECREF(pName);
if (pModule != NULL) {
// On accède au dictionnaire du module
pDict = PyModule_GetDict(pModule);
pInfo = Py_BuildValue("[s]", "");
// On ajoute un attribut à notre dictionnaire
PyDict_SetItemString(pDict, "info", pInfo);
pFunc = PyObject_GetAttrString(pModule, "GetInfo");
// pFunc is a new reference
if (pFunc && PyCallable_Check(pFunc)) {
pValue = PyObject_CallObject(pFunc, NULL);
if (pValue != NULL) {
// On accède à une propriété du dictionnaire
pResult = PyDict_GetItemString(pDict, "info");
result = PyString_AsString(PyList_GET_ITEM(pResult,0));
Py_DECREF(pValue);
Py_DECREF(pResult);
}
else {
Py_DECREF(pFunc);
Py_DECREF(pModule);
return 1;
}
}
PyErr_Clear();
Py_XDECREF(pFunc);
Py_XDECREF(pDict);
Py_XDECREF(pInfo);
Py_XDECREF(pModule);
}
return 0;
} |
La premi�re ex�cution de cette fonction fonctionne parfaitement, mais � la deuxi�me ex�cution, lors du "pModule = PyImport_Import(pName); " qui est donc la premi�re d�finition d'un PyObject dans la fonction, une "Assertion Failed !" me saute au visage m'indiquant que c'est l'expression gc->gc.gc_refs != 0 qui pose probl�me.
Je pr�cise que ce message d'erreur survient uniquement lors d'une compilation en debug, en release il n'y a pas de probl�me � ce niveau. Par contre en release, j'ai une exception qui est lev�e au moment du Py_Finalize(); Je ne serais pas �tonn� qu'il y a un lien entre les deux en tout cas.
J'esp�re avoir �t� assez clair dans la description de mon probl�me et que vous pourrez m'�clairer � ce sujet =)