[Bf-blender-cvs] [8262c2577e2] spreadsheet-active-node: cleanup

Jacques Lucke noreply at git.blender.org
Wed Mar 31 13:31:15 CEST 2021


Commit: 8262c2577e22959a2f52b0c037c8ce115db7dc19
Author: Jacques Lucke
Date:   Wed Mar 31 12:52:45 2021 +0200
Branches: spreadsheet-active-node
https://developer.blender.org/rB8262c2577e22959a2f52b0c037c8ce115db7dc19

cleanup

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

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object.c
M	source/blender/modifiers/intern/MOD_nodes.cc

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

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 0c2c6313dde..9122d030f3c 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -34,6 +34,7 @@ struct Base;
 struct BoundBox;
 struct Curve;
 struct Depsgraph;
+struct GeometrySet;
 struct GpencilModifierData;
 struct HookGpencilModifierData;
 struct HookModifierData;
@@ -69,6 +70,8 @@ void BKE_object_free_curve_cache(struct Object *ob);
 void BKE_object_free_derived_caches(struct Object *ob);
 void BKE_object_free_caches(struct Object *object);
 
+void BKE_object_preview_geometry_set(struct Object *ob, struct GeometrySet *geometry_set);
+
 void BKE_object_modifier_hook_reset(struct Object *ob, struct HookModifierData *hmd);
 void BKE_object_modifier_gpencil_hook_reset(struct Object *ob,
                                             struct HookGpencilModifierData *hmd);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 1413fddd18c..c58183f79ec 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1810,6 +1810,18 @@ void BKE_object_free_caches(Object *object)
   }
 }
 
+/* Can be called from multiple threads. */
+void BKE_object_preview_geometry_set(Object *ob, struct GeometrySet *geometry_set)
+{
+  static ThreadMutex mutex = BLI_MUTEX_INITIALIZER;
+  BLI_mutex_lock(&mutex);
+  if (ob->runtime.geometry_set_preview != NULL) {
+    BKE_geometry_set_free(ob->runtime.geometry_set_preview);
+  }
+  ob->runtime.geometry_set_preview = geometry_set;
+  BLI_mutex_unlock(&mutex);
+}
+
 /**
  * Actual check for internal data, not context or flags.
  */
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 7815234b037..ee0d70e70ec 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -51,6 +51,7 @@
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
 #include "BKE_node_ui_storage.hh"
+#include "BKE_object.h"
 #include "BKE_pointcloud.h"
 #include "BKE_screen.h"
 #include "BKE_simulation.h"
@@ -406,11 +407,8 @@ class GeometryNodesEvaluator {
         if (output_socket->is_available() && output_socket->bsocket()->type == SOCK_GEOMETRY) {
           GeometrySet value = node_outputs_map.lookup<GeometrySet>(output_socket->identifier());
           value.ensure_own_non_instances();
-          static std::mutex mutex;
-          std::lock_guard lock{mutex};
-          delete self_object_->runtime.geometry_set_preview;
-          const_cast<Object *>(self_object_)->runtime.geometry_set_preview = new GeometrySet(
-              std::move(value));
+          BKE_object_preview_geometry_set(const_cast<Object *>(self_object_),
+                                          new GeometrySet(std::move(value)));
         }
       }
     }



More information about the Bf-blender-cvs mailing list