diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-02-12 23:53:42 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-02-12 23:58:06 +0400 |
commit | a397009181c8fa76501f09029d7f308e4961df51 (patch) | |
tree | b18e35edddad2aaf1e5ef23c7c291c438f884777 /source | |
parent | 70905a6e02a05b650acfb894265b3a2d201f193b (diff) |
Fix T38541: sys.exit fails when blender is built as a py-module
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 10 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_init_exit.c | 17 | ||||
-rw-r--r-- | source/creator/creator.c | 2 |
3 files changed, 17 insertions, 12 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(); - +} + +void WM_exit(bContext *C) +{ + WM_exit_ext(C, 1); + printf("\nBlender quit\n"); - -#ifdef WIN32 + +#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 -} +#endif -void WM_exit(bContext *C) -{ - WM_exit_ext(C, 1); 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 |