diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-04-25 19:23:26 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-04-25 19:23:26 (GMT) |
commit | eec60603a89eabf8945a0928b5b105f6e923d1ea (patch) | |
tree | f352568f03f9012e1225289033d0782e60677749 /Modules | |
parent | f645451d78f046c4df47ed420f7c38948f81eeb0 (diff) | |
parent | 72562d065e51a62023f585037e6d5eb4ccb71784 (diff) | |
download | cpython-eec60603a89eabf8945a0928b5b105f6e923d1ea.zip cpython-eec60603a89eabf8945a0928b5b105f6e923d1ea.tar.gz cpython-eec60603a89eabf8945a0928b5b105f6e923d1ea.tar.bz2 |
Issue #10914: Add a minimal embedding test to test_capi.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_testembed.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Modules/_testembed.c b/Modules/_testembed.c new file mode 100644 index 0000000..0df5ede --- /dev/null +++ b/Modules/_testembed.c @@ -0,0 +1,52 @@ +#include <Python.h> +#include <stdio.h> + +void print_subinterp(void) +{ + /* Just output some debug stuff */ + PyThreadState *ts = PyThreadState_Get(); + printf("interp %p, thread state %p: ", ts->interp, ts); + fflush(stdout); + PyRun_SimpleString( + "import sys;" + "print('id(modules) =', id(sys.modules));" + "sys.stdout.flush()" + ); +} + +int main(int argc, char *argv[]) +{ + PyThreadState *mainstate, *substate; + PyGILState_STATE gilstate; + int i, j; + + for (i=0; i<3; i++) { + printf("--- Pass %d ---\n", i); + /* HACK: the "./" at front avoids a search along the PATH in + Modules/getpath.c */ + Py_SetProgramName(L"./_testembed"); + Py_Initialize(); + mainstate = PyThreadState_Get(); + + PyEval_InitThreads(); + PyEval_ReleaseThread(mainstate); + + gilstate = PyGILState_Ensure(); + print_subinterp(); + PyThreadState_Swap(NULL); + + for (j=0; j<3; j++) { + substate = Py_NewInterpreter(); + print_subinterp(); + Py_EndInterpreter(substate); + } + + PyThreadState_Swap(mainstate); + print_subinterp(); + PyGILState_Release(gilstate); + + PyEval_RestoreThread(mainstate); + Py_Finalize(); + } + return 0; +} |