MCPcopy Create free account
hub / github.com/numpy/numpy / F2PySwapThreadLocalCallbackPtr

Function F2PySwapThreadLocalCallbackPtr

numpy/f2py/src/fortranobject.c:37–76  ·  view source on GitHub ↗

* Python-only fallback for thread-local callback pointers */

Source from the content-addressed store, hash-verified

35 * Python-only fallback for thread-local callback pointers
36 */
37void *
38F2PySwapThreadLocalCallbackPtr(char *key, void *ptr)
39{
40 PyObject *local_dict, *value;
41 void *prev;
42
43 local_dict = PyThreadState_GetDict();
44 if (local_dict == NULL) {
45 Py_FatalError(
46 "F2PySwapThreadLocalCallbackPtr: PyThreadState_GetDict "
47 "failed");
48 }
49
50 value = PyDict_GetItemString(local_dict, key);
51 if (value != NULL) {
52 prev = PyLong_AsVoidPtr(value);
53 if (PyErr_Occurred()) {
54 Py_FatalError(
55 "F2PySwapThreadLocalCallbackPtr: PyLong_AsVoidPtr failed");
56 }
57 }
58 else {
59 prev = NULL;
60 }
61
62 value = PyLong_FromVoidPtr((void *)ptr);
63 if (value == NULL) {
64 Py_FatalError(
65 "F2PySwapThreadLocalCallbackPtr: PyLong_FromVoidPtr failed");
66 }
67
68 if (PyDict_SetItemString(local_dict, key, value) != 0) {
69 Py_FatalError(
70 "F2PySwapThreadLocalCallbackPtr: PyDict_SetItemString failed");
71 }
72
73 Py_DECREF(value);
74
75 return prev;
76}
77
78void *
79F2PyGetThreadLocalCallbackPtr(char *key)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected