Use a counter instead of a Boolean to check for initialized; n calls

to Py_Initialize will be undone by n calls to Py_Uninitialize.
This commit is contained in:
Guido van Rossum 1997-08-20 22:40:18 +00:00
parent 558be283bf
commit aa61505fd2
2 changed files with 7 additions and 5 deletions

View File

@ -168,6 +168,7 @@ main_thread(int port)
PyEval_AcquireThread(gtstate);
gtstate = NULL;
Py_Finalize();
Py_Finalize();
}
exit(0);
}
@ -213,6 +214,7 @@ init_python()
if (gtstate)
return;
Py_Initialize(); /* Initialize the interpreter */
Py_Initialize(); /* Initialize the interpreter */
PyEval_InitThreads(); /* Create (and acquire) the interpreter lock */
gtstate = PyEval_SaveThread(); /* Release the thread state */
}

View File

@ -98,9 +98,8 @@ Py_Initialize()
PyObject *bimod, *sysmod;
char *p;
if (initialized)
Py_FatalError("Py_Initialize: already initialized");
initialized = 1;
if (++initialized > 1)
return;
if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
Py_DebugFlag = 1;
@ -166,9 +165,10 @@ Py_Finalize()
call_sys_exitfunc();
if (!initialized)
if (--initialized > 0)
return;
if (initialized < 0)
Py_FatalError("Py_Finalize: not initialized");
initialized = 0;
tstate = PyThreadState_Get();
interp = tstate->interp;