]> granicus.if.org Git - python/commitdiff
/* An extension mechanism to store arbitrary additional per-thread state.
authorGuido van Rossum <guido@python.org>
Fri, 10 Apr 1998 20:18:25 +0000 (20:18 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 10 Apr 1998 20:18:25 +0000 (20:18 +0000)
   PyThreadState_GetDict() returns a dictionary that can be used to hold such
   state; the caller should pick a unique key and store its state there.  If
   PyThreadState_GetDict() returns NULL, an exception has been raised (most
   likely MemoryError) and the caller should pass on the exception. */

PyObject *
PyThreadState_GetDict()

Python/pystate.c

index f1dc4138db7dc87664ced7c81e2bf82e9cf90d86..e74e34ca4a868ff59a0b212986e7e7c04230fe4a 100644 (file)
@@ -126,6 +126,8 @@ PyThreadState_New(interp)
                tstate->ticker = 0;
                tstate->tracing = 0;
 
+               tstate->dict = NULL;
+
                tstate->curexc_type = NULL;
                tstate->curexc_value = NULL;
                tstate->curexc_traceback = NULL;
@@ -155,6 +157,8 @@ PyThreadState_Clear(tstate)
 
        ZAP(tstate->frame);
 
+       ZAP(tstate->dict);
+
        ZAP(tstate->curexc_type);
        ZAP(tstate->curexc_value);
        ZAP(tstate->curexc_traceback);
@@ -213,3 +217,20 @@ PyThreadState_Swap(new)
 
        return old;
 }
+
+/* An extension mechanism to store arbitrary additional per-thread state.
+   PyThreadState_GetDict() returns a dictionary that can be used to hold such
+   state; the caller should pick a unique key and store its state there.  If
+   PyThreadState_GetDict() returns NULL, an exception has been raised (most
+   likely MemoryError) and the caller should pass on the exception. */
+
+PyObject *
+PyThreadState_GetDict()
+{
+       if (current_tstate == NULL)
+               Py_FatalError("PyThreadState_GetDict: no current thread");
+
+       if (current_tstate->dict == NULL)
+               current_tstate->dict = PyDict_New();
+       return current_tstate->dict;
+}