fix for crash when loading a file from a script, and executing user modules in the...
[blender.git] / source / blender / python / intern / bpy_interface.c
index 8bd6e6c611c14dd2821204838d43ba56e2f36b1e..e5e90380d61a1fe174145feccbd9cbf9f1dd3d94 100644 (file)
@@ -87,6 +87,14 @@ static double        bpy_timer_run; /* time for each python script run */
 static double  bpy_timer_run_tot; /* accumulate python runs */
 #endif
 
+/* use for updating while a python script runs - in case of file load */
+void bpy_context_update(bContext *C)
+{
+       BPy_SetContext(C);
+       bpy_import_main_set(CTX_data_main(C));
+       BPY_modules_update(C); /* can give really bad results if this isnt here */
+}
+
 void bpy_context_set(bContext *C, PyGILState_STATE *gilstate)
 {
        py_call_level++;
@@ -95,16 +103,7 @@ void bpy_context_set(bContext *C, PyGILState_STATE *gilstate)
                *gilstate= PyGILState_Ensure();
 
        if(py_call_level==1) {
-
-               if(C) { // XXX - should always be true.
-                       BPy_SetContext(C);
-                       bpy_import_main_set(CTX_data_main(C));
-               }
-               else {
-                       fprintf(stderr, "ERROR: Python context called with a NULL Context. this should not happen!\n");
-               }
-
-               BPY_modules_update(C); /* can give really bad results if this isnt here */
+               bpy_context_update(C);
 
 #ifdef TIME_PY_RUN
                if(bpy_timer_count==0) {
@@ -570,6 +569,12 @@ void BPY_modules_load_user(bContext *C)
        if(bmain==NULL)
                return;
 
+       /* update pointers since this can run from a nested script
+        * on file load */
+       if(py_call_level) {
+               bpy_context_update(C);
+       }
+
        bpy_context_set(C, &gilstate);
 
        for(text=CTX_data_main(C)->text.first; text; text= text->id.next) {