[Bf-blender-cvs] [a397009] master: Fix T38541: sys.exit fails when blender is built as a py-module

Campbell Barton noreply at git.blender.org
Wed Feb 12 20:58:39 CET 2014


Commit: a397009181c8fa76501f09029d7f308e4961df51
Author: Campbell Barton
Date:   Thu Feb 13 06:53:42 2014 +1100
https://developer.blender.org/rBa397009181c8fa76501f09029d7f308e4961df51

Fix T38541: sys.exit fails when blender is built as a py-module

===================================================================

M	source/blender/python/intern/bpy_interface.c
M	source/blender/windowmanager/intern/wm_init_exit.c
M	source/creator/creator.c

===================================================================

diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index aafb5e3..a547604 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 e0ec9c9..5b1fd90 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 8fdd19e..dbb7bef 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




More information about the Bf-blender-cvs mailing list