[Bf-blender-cvs] [38cfd7b9e75] blender2.8: Depsgraph: Fix crash with copy-on-write enabled after recent changes
Sergey Sharybin
noreply at git.blender.org
Thu Jul 13 15:24:44 CEST 2017
Commit: 38cfd7b9e75b6c93888c80979b91896df1de3b30
Author: Sergey Sharybin
Date: Thu Jul 13 14:57:19 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB38cfd7b9e75b6c93888c80979b91896df1de3b30
Depsgraph: Fix crash with copy-on-write enabled after recent changes
The issue was caused by original datablock being returned where we
were expecting copy-on-written one to be returned.
===================================================================
M source/blender/blenkernel/intern/layer.c
===================================================================
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 6d131810216..a0250ac8dfc 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -81,7 +81,7 @@ SceneLayer *BKE_scene_layer_render_active(const Scene *scene)
/**
* Returns the SceneLayer to be used for drawing, outliner, and other context related areas.
*/
-SceneLayer *BKE_scene_layer_context_active_ex(const Main *bmain, const Scene *UNUSED(scene))
+SceneLayer *BKE_scene_layer_context_active_ex(const Main *bmain, const Scene *scene)
{
/* XXX We should really pass the workspace as argument, but would require
* some bigger changes since it's often not available where we call this.
@@ -90,7 +90,21 @@ SceneLayer *BKE_scene_layer_context_active_ex(const Main *bmain, const Scene *UN
/* Called on startup, so 'winactive' may not be set, in that case fall back to first window. */
wmWindow *win = wm->winactive ? wm->winactive : wm->windows.first;
const WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
- return BKE_workspace_render_layer_get(workspace);
+ SceneLayer *scene_layer = BKE_workspace_render_layer_get(workspace);
+ if (scene_layer != NULL) {
+ /* NOTE: We never have copy-on-written main database, but we might
+ * be passing copy-on-write version of scene here. For that case
+ * we always ensure we are returning copy-on-write version of scene
+ * layer as well.
+ */
+
+ /* TODO(sergey): This will make an extra lookup for case when we
+ * pass original scene, but this function is to be rewritten
+ * anyway.
+ */
+ scene_layer = BLI_findstring(&scene->render_layers, scene_layer->name, offsetof(SceneLayer, name));
+ }
+ return scene_layer;
}
return NULL;
More information about the Bf-blender-cvs
mailing list