From a397009181c8fa76501f09029d7f308e4961df51 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 13 Feb 2014 06:53:42 +1100 Subject: [PATCH] Fix T38541: sys.exit fails when blender is built as a py-module --- source/blender/python/intern/bpy_interface.c | 10 ++++++--- .../windowmanager/intern/wm_init_exit.c | 21 ++++++++++--------- source/creator/creator.c | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index aafb5e3d642..a547604cdd6 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -361,8 +361,10 @@ void BPY_python_start(int argc, const char **argv) void BPY_python_end(void) { // fprintf(stderr, "Ending Python!\n"); + PyGILState_STATE gilstate; - PyGILState_Ensure(); /* finalizing, no need to grab the state */ + /* finalizing, no need to grab the state, except when we are a module */ + gilstate = PyGILState_Ensure(); /* free other python data. */ pyrna_free_types(); @@ -373,10 +375,12 @@ void BPY_python_end(void) #ifndef WITH_PYTHON_MODULE BPY_atexit_unregister(); /* without this we get recursive calls to WM_exit */ -#endif Py_Finalize(); - +#else + PyGILState_Release(gilstate); +#endif + #ifdef TIME_PY_RUN /* measure time since py started */ bpy_timer = PIL_check_seconds_timer() - bpy_timer; diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index e0ec9c994db..5b1fd90a0df 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -522,20 +522,21 @@ void WM_exit_ext(bContext *C, const bool do_python) MEM_printmemlist(); } wm_autosave_delete(); - - printf("\nBlender quit\n"); - -#ifdef WIN32 - /* ask user to press a key when in debug mode */ - if (G.debug & G_DEBUG) { - printf("Press any key to exit . . .\n\n"); - wait_for_console_key(); - } -#endif } void WM_exit(bContext *C) { WM_exit_ext(C, 1); + + printf("\nBlender quit\n"); + +#ifdef WIN32 + /* ask user to press a key when in debug mode */ + if (G.debug & G_DEBUG) { + printf("Press any key to exit . . .\n\n"); + wait_for_console_key(); + } +#endif + exit(G.is_break == TRUE); } diff --git a/source/creator/creator.c b/source/creator/creator.c index 8fdd19e007a..dbb7bef9723 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -1746,7 +1746,7 @@ int main(int argc, const char **argv) #ifdef WITH_PYTHON_MODULE void main_python_exit(void) { - WM_exit((bContext *)evil_C); + WM_exit_ext((bContext *)evil_C, true); evil_C = NULL; } #endif