@@ -23,7 +23,11 @@ PyObject* PyXmlSec_Error;
2323PyObject * PyXmlSec_InternalError ;
2424PyObject * PyXmlSec_VerificationError ;
2525
26+ #if PY_MINOR_VERSION >= 7
27+ static Py_tss_t PyXmlSec_LastErrorKey ;
28+ #else
2629static int PyXmlSec_LastErrorKey = 0 ;
30+ #endif
2731
2832static int PyXmlSec_PrintErrorMessage = 0 ;
2933
@@ -71,16 +75,26 @@ static PyXmlSec_ErrorHolder* PyXmlSec_ExchangeLastError(PyXmlSec_ErrorHolder* e)
7175 PyXmlSec_ErrorHolder * v ;
7276 int r ;
7377
74- if (PyXmlSec_LastErrorKey == 0 ) {
78+ #if PY_MINOR_VERSION >= 7
79+ if (PyThread_tss_is_created (& PyXmlSec_LastErrorKey ) != 0 ) {
80+ #else
81+ if (PyXmlSec_LastErrorKey != 0 ) {
82+ #endif
7583 PYXMLSEC_DEBUG ("WARNING: There is no error key." );
7684 PyXmlSec_ErrorHolderFree (e );
7785 return NULL ;
7886 }
7987
8088 // get_key_value and set_key_value are gil free
89+ #if PY_MINOR_VERSION >= 7
90+ v = (PyXmlSec_ErrorHolder * )PyThread_tss_get (& PyXmlSec_LastErrorKey );
91+ //PyThread_tss_delete(&PyXmlSec_LastErrorKey);
92+ r = PyThread_tss_set (& PyXmlSec_LastErrorKey , (void * )e );
93+ #else
8194 v = (PyXmlSec_ErrorHolder * )PyThread_get_key_value (PyXmlSec_LastErrorKey );
8295 PyThread_delete_key_value (PyXmlSec_LastErrorKey );
8396 r = PyThread_set_key_value (PyXmlSec_LastErrorKey , (void * )e );
97+ #endif
8498 PYXMLSEC_DEBUGF ("set_key_value returns %d" , r );
8599 return v ;
86100}
@@ -166,7 +180,11 @@ void PyXmlSecEnableDebugTrace(int v) {
166180}
167181
168182void PyXmlSec_InstallErrorCallback () {
183+ #if PY_MINOR_VERSION >= 7
184+ if (PyThread_tss_is_created (& PyXmlSec_LastErrorKey ) != 0 ) {
185+ #else
169186 if (PyXmlSec_LastErrorKey != 0 ) {
187+ #endif
170188 xmlSecErrorsSetCallback (PyXmlSec_ErrorCallback );
171189 }
172190}
@@ -190,8 +208,14 @@ int PyXmlSec_ExceptionsModule_Init(PyObject* package) {
190208 if (PyModule_AddObject (package , "InternalError" , PyXmlSec_InternalError ) < 0 ) goto ON_FAIL ;
191209 if (PyModule_AddObject (package , "VerificationError" , PyXmlSec_VerificationError ) < 0 ) goto ON_FAIL ;
192210
211+ #if PY_MINOR_VERSION >= 7
212+ if (PyThread_tss_create (& PyXmlSec_LastErrorKey )) {
213+ PyXmlSec_InstallErrorCallback ();
214+ }
215+ #else
193216 PyXmlSec_LastErrorKey = PyThread_create_key ();
194217 PyXmlSec_InstallErrorCallback ();
218+ #endif
195219
196220 return 0 ;
197221
0 commit comments