[Bf-blender-cvs] [e4379971746] blender-v3.3-release: Fix: compositor stats in background mode subject to race conditions

Chris Clyne noreply at git.blender.org
Fri Aug 5 19:41:33 CEST 2022


Commit: e4379971746c8b7fadb7c0c0f0933533e15376a3
Author: Chris Clyne
Date:   Fri Aug 5 16:43:17 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rBe4379971746c8b7fadb7c0c0f0933533e15376a3

Fix: compositor stats in background mode subject to race conditions

Evaluating a compositor node tree in background mode causes the stats callback
to be called from multiple threads, leading to garbled output. This was causing
major problems with render-farm scripts.

Differential Revision: https://developer.blender.org/D15633

===================================================================

M	source/blender/render/intern/pipeline.c

===================================================================

diff --git a/source/blender/render/intern/pipeline.c b/source/blender/render/intern/pipeline.c
index 1c42467bc3d..30e8cfa5c17 100644
--- a/source/blender/render/intern/pipeline.c
+++ b/source/blender/render/intern/pipeline.c
@@ -199,14 +199,20 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs)
   megs_used_memory = (mem_in_use) / (1024.0 * 1024.0);
   megs_peak_memory = (peak_memory) / (1024.0 * 1024.0);
 
+  BLI_timecode_string_from_time_simple(
+      info_time_str, sizeof(info_time_str), PIL_check_seconds_timer() - rs->starttime);
+
+  /* Compositor calls this from multiple threads, mutex lock to ensure we don't
+   * get garbled output. */
+  static ThreadMutex mutex = BLI_MUTEX_INITIALIZER;
+  BLI_mutex_lock(&mutex);
+
   fprintf(stdout,
           TIP_("Fra:%d Mem:%.2fM (Peak %.2fM) "),
           rs->cfra,
           megs_used_memory,
           megs_peak_memory);
 
-  BLI_timecode_string_from_time_simple(
-      info_time_str, sizeof(info_time_str), PIL_check_seconds_timer() - rs->starttime);
   fprintf(stdout, TIP_("| Time:%s | "), info_time_str);
 
   fprintf(stdout, "%s", rs->infostr);
@@ -220,6 +226,8 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs)
 
   fputc('\n', stdout);
   fflush(stdout);
+
+  BLI_mutex_unlock(&mutex);
 }
 
 void RE_FreeRenderResult(RenderResult *rr)



More information about the Bf-blender-cvs mailing list