[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34595] trunk/blender/source/blender: fix for 2 segfaults running in background mode.

Campbell Barton ideasman42 at gmail.com
Tue Feb 1 03:54:35 CET 2011


Revision: 34595
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34595
Author:   campbellbarton
Date:     2011-02-01 02:54:29 +0000 (Tue, 01 Feb 2011)
Log Message:
-----------
fix for 2 segfaults running in background mode.
- operators which reload G.main would crash blender if called from python and then accessed bpy.data.*
- WM_read_homefile_exec was setting the contexts Scene to NULL as a signal for the event system, this didnt work in background mode, crashing when property update functions expected scene to be set.

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_operator.c
    trunk/blender/source/blender/python/intern/bpy_rna.c
    trunk/blender/source/blender/python/intern/bpy_rna.h
    trunk/blender/source/blender/windowmanager/intern/wm_files.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator.c	2011-02-01 01:32:12 UTC (rev 34594)
+++ trunk/blender/source/blender/python/intern/bpy_operator.c	2011-02-01 02:54:29 UTC (rev 34595)
@@ -231,6 +231,12 @@
 		return NULL;
 	}
 
+	/* when calling  bpy.ops.wm.read_factory_settings() bpy.data's main pointer is freed by clear_globals(),
+	 * further access will crash blender. setting context is not needed in this case, only calling because this
+	 * function corrects bpy.data (internal Main pointer) */
+	BPY_modules_update(C);
+
+
 	/* return operator_ret as a bpy enum */
 	return pyrna_enum_bitfield_to_py(operator_return_items, operator_ret);
 

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2011-02-01 01:32:12 UTC (rev 34594)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2011-02-01 02:54:29 UTC (rev 34595)
@@ -5316,8 +5316,6 @@
 	return 0;
 }
 
-extern void BPY_modules_update(bContext *C); //XXX temp solution
-
 /* TODO - multiple return values like with rna functions */
 static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *parms)
 {

Modified: trunk/blender/source/blender/python/intern/bpy_rna.h
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.h	2011-02-01 01:32:12 UTC (rev 34594)
+++ trunk/blender/source/blender/python/intern/bpy_rna.h	2011-02-01 02:54:29 UTC (rev 34595)
@@ -110,4 +110,6 @@
 
 int pyrna_write_check(void);
 
+void BPY_modules_update(struct bContext *C); //XXX temp solution
+
 #endif

Modified: trunk/blender/source/blender/windowmanager/intern/wm_files.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_files.c	2011-02-01 01:32:12 UTC (rev 34594)
+++ trunk/blender/source/blender/windowmanager/intern/wm_files.c	2011-02-01 02:54:29 UTC (rev 34595)
@@ -429,10 +429,14 @@
 		BPY_modules_load_user(C);
 	}
 #endif
-	
+
 	WM_event_add_notifier(C, NC_WM|ND_FILEREAD, NULL);
-	CTX_wm_window_set(C, NULL); /* exits queues */
 
+	/* in background mode the scene will stay NULL */
+	if(!G.background) {
+		CTX_wm_window_set(C, NULL); /* exits queues */
+	}
+
 	return TRUE;
 }
 

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-02-01 01:32:12 UTC (rev 34594)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-02-01 02:54:29 UTC (rev 34595)
@@ -1350,7 +1350,7 @@
 	
 	ot->invoke= WM_operator_confirm;
 	ot->exec= WM_read_homefile_exec;
-	ot->poll= WM_operator_winactive;
+	/* ommit poll to run in background mode */
 }
 
 static void WM_OT_read_factory_settings(wmOperatorType *ot)
@@ -1361,7 +1361,7 @@
 	
 	ot->invoke= WM_operator_confirm;
 	ot->exec= WM_read_homefile_exec;
-	ot->poll= WM_operator_winactive;
+	/* ommit poll to run in background mode */
 }
 
 /* *************** open file **************** */




More information about the Bf-blender-cvs mailing list