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;
 }
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to