Depsgraph: Fix crash using --debug-depsgraph and --debug-depsgraph-no-threads
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 21 Feb 2018 09:42:22 +0000 (10:42 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 21 Feb 2018 09:42:22 +0000 (10:42 +0100)
Was accessing past the array boundaries.

Should be safe for 2.79a.

source/blender/blenkernel/intern/scene.c

index 423ed2af057ad698dd211b4d7216d54ca3afb9d7..2e5b14cd902406905a5a3821e49de4f10741f4b7 100644 (file)
@@ -1518,6 +1518,8 @@ typedef struct ThreadedObjectUpdateState {
        bool has_mballs;
 #endif
 
+       int num_threads;
+
        /* Execution statistics */
        bool has_updated_objects;
        ListBase *statistics;
@@ -1617,7 +1619,6 @@ static void scene_update_object_add_task(void *node, void *user_data)
 
 static void print_threads_statistics(ThreadedObjectUpdateState *state)
 {
-       int i, tot_thread;
        double finish_time;
 
        if ((G.debug & G_DEBUG_DEPSGRAPH) == 0) {
@@ -1645,10 +1646,9 @@ static void print_threads_statistics(ThreadedObjectUpdateState *state)
        }
 #else
        finish_time = PIL_check_seconds_timer();
-       tot_thread = BLI_system_thread_count();
        int total_objects = 0;
 
-       for (i = 0; i < tot_thread; i++) {
+       for (int i = 0; i < state->num_threads; i++) {
                int thread_total_objects = 0;
                double thread_total_time = 0.0;
                StatisicsEntry *entry;
@@ -1745,6 +1745,7 @@ static void scene_update_objects(EvaluationContext *eval_ctx, Main *bmain, Scene
                                               "scene update objects stats");
                state.has_updated_objects = false;
                state.base_time = PIL_check_seconds_timer();
+               state.num_threads = tot_thread;
        }
 
 #ifdef MBALL_SINGLETHREAD_HACK