[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15768] trunk/blender/source/blender/ python: == PyNodes ==

Willian Padovani Germano wpgermano at gmail.com
Sat Jul 26 00:30:04 CEST 2008


Revision: 15768
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15768
Author:   ianwill
Date:     2008-07-26 00:30:03 +0200 (Sat, 26 Jul 2008)

Log Message:
-----------
== PyNodes ==

Early Ehlinger reported a deadlock when a script tells Blender to render an animation and there are pynodes. While investigating I saw related crashes in bg (blender -b) mode, still not fixed. This commit tries to fix the problem for interactive mode, then. What it does is releasing the lock before rendering and relocking after that, like theeth suggests in the bug report:

http://projects.blender.org/tracker/?func=detail&atid=125&aid=17389&group_id=9

Modified Paths:
--------------
    trunk/blender/source/blender/python/BPY_interface.c
    trunk/blender/source/blender/python/api2_2x/sceneRender.c

Modified: trunk/blender/source/blender/python/BPY_interface.c
===================================================================
--- trunk/blender/source/blender/python/BPY_interface.c	2008-07-25 21:56:06 UTC (rev 15767)
+++ trunk/blender/source/blender/python/BPY_interface.c	2008-07-25 22:30:03 UTC (rev 15768)
@@ -410,12 +410,14 @@
 	mod = PyImport_ImportModule( "sys" );	
 	if (!mod) {
 		printf("error: could not import python sys module. some modules may not import.\n");
+		PyGILState_Release(gilstate);
 		return;
 	}
 	
 	if (!bpy_orig_syspath_List) { /* should never happen */
 		printf("error refershing python path\n");
 		Py_DECREF(mod);
+		PyGILState_Release(gilstate);
 		return;
 	}
 	

Modified: trunk/blender/source/blender/python/api2_2x/sceneRender.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/sceneRender.c	2008-07-25 21:56:06 UTC (rev 15767)
+++ trunk/blender/source/blender/python/api2_2x/sceneRender.c	2008-07-25 22:30:03 UTC (rev 15768)
@@ -565,6 +565,8 @@
 PyObject *RenderData_RenderAnim( BPy_RenderData * self )
 {
 	Scene *oldsce;
+	/* this prevents a deadlock when there are pynodes: */
+	PyThreadState *tstate = PyEval_SaveThread();
 
 	if (!G.background) {
 		oldsce = G.scene;
@@ -582,9 +584,9 @@
 		if (G.scene->r.sfra > G.scene->r.efra)
 			return EXPP_ReturnPyObjError (PyExc_RuntimeError,
 				"start frame must be less or equal to end frame");
-		
 		RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra);
 	}
+	PyEval_RestoreThread(tstate);
 	Py_RETURN_NONE;
 }
 





More information about the Bf-blender-cvs mailing list