Skip to content

Commit e271d8e

Browse files
committed
support PEP 539 for Python>=3.7
Signed-off-by: oleg.hoefling <[email protected]>
1 parent c8dc41a commit e271d8e

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/exception.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ PyObject* PyXmlSec_Error;
2323
PyObject* PyXmlSec_InternalError;
2424
PyObject* PyXmlSec_VerificationError;
2525

26+
#if PY_MINOR_VERSION >= 7
27+
static Py_tss_t PyXmlSec_LastErrorKey;
28+
#else
2629
static int PyXmlSec_LastErrorKey = 0;
30+
#endif
2731

2832
static 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

168182
void 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

Comments
 (0)