[Bf-blender-cvs] [71099a3d67f] master: Fix T66290: new Node's init api callback was not handling ID usercount.
Bastien Montagne
noreply at git.blender.org
Tue Jul 2 15:13:10 CEST 2019
Commit: 71099a3d67fbf8cfb83faa014215f34fa3232ff6
Author: Bastien Montagne
Date: Tue Jul 2 15:08:16 2019 +0200
Branches: master
https://developer.blender.org/rB71099a3d67fbf8cfb83faa014215f34fa3232ff6
Fix T66290: new Node's init api callback was not handling ID usercount.
As Usual...
Note that we have to edit each C-defined of those callbacks that set
Node->id pointer, instead of just moving the generic call to
`id_us_plus()` in `node_init()` below the call to
`ntype->initfunc_api()`, since that one manipulates RNA pointers, which
are supposed to already handle usercounts themselves on assignment.
The C callbacks are moving back to manipulating directly DNA, so it's
their responsability to handle user count then (Py code should do that
automatically through RNA assignement).
===================================================================
M source/blender/nodes/composite/nodes/node_composite_image.c
M source/blender/nodes/composite/nodes/node_composite_movieclip.c
M source/blender/nodes/composite/nodes/node_composite_moviedistortion.c
M source/blender/nodes/composite/nodes/node_composite_stabilize2d.c
M source/blender/nodes/composite/nodes/node_composite_switchview.c
===================================================================
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c
index 79db436ec4e..88765f1d165 100644
--- a/source/blender/nodes/composite/nodes/node_composite_image.c
+++ b/source/blender/nodes/composite/nodes/node_composite_image.c
@@ -32,6 +32,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_scene.h"
@@ -514,6 +515,7 @@ static void node_composit_init_rlayers(const bContext *C, PointerRNA *ptr)
int sock_index = 0;
node->id = &scene->id;
+ id_us_plus(node->id);
for (bNodeSocket *sock = node->outputs.first; sock; sock = sock->next, sock_index++) {
NodeImageLayer *sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
diff --git a/source/blender/nodes/composite/nodes/node_composite_movieclip.c b/source/blender/nodes/composite/nodes/node_composite_movieclip.c
index e871b764a82..07b339a5b78 100644
--- a/source/blender/nodes/composite/nodes/node_composite_movieclip.c
+++ b/source/blender/nodes/composite/nodes/node_composite_movieclip.c
@@ -24,6 +24,7 @@
#include "node_composite_util.h"
#include "BKE_context.h"
+#include "BKE_library.h"
static bNodeSocketTemplate cmp_node_movieclip_out[] = {
{SOCK_RGBA, 0, N_("Image")},
@@ -42,6 +43,7 @@ static void init(const bContext *C, PointerRNA *ptr)
MovieClipUser *user = MEM_callocN(sizeof(MovieClipUser), "node movie clip user");
node->id = (ID *)scene->clip;
+ id_us_plus(node->id);
node->storage = user;
user->framenr = 1;
}
diff --git a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c
index dbdd65c5976..d218f7568eb 100644
--- a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c
+++ b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c
@@ -24,6 +24,7 @@
#include "node_composite_util.h"
#include "BKE_context.h"
+#include "BKE_library.h"
/* **************** Translate ******************** */
@@ -53,6 +54,7 @@ static void init(const bContext *C, PointerRNA *ptr)
Scene *scene = CTX_data_scene(C);
node->id = (ID *)scene->clip;
+ id_us_plus(node->id);
}
static void storage_free(bNode *node)
diff --git a/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c b/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c
index 55d4ada0ca1..c13356f72b0 100644
--- a/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c
+++ b/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c
@@ -24,6 +24,7 @@
#include "node_composite_util.h"
#include "BKE_context.h"
+#include "BKE_library.h"
/* **************** Translate ******************** */
@@ -43,6 +44,7 @@ static void init(const bContext *C, PointerRNA *ptr)
Scene *scene = CTX_data_scene(C);
node->id = (ID *)scene->clip;
+ id_us_plus(node->id);
/* default to bilinear, see node_sampler_type_items in rna_nodetree.c */
node->custom1 = 1;
diff --git a/source/blender/nodes/composite/nodes/node_composite_switchview.c b/source/blender/nodes/composite/nodes/node_composite_switchview.c
index 12401a8bbdf..92e06307afb 100644
--- a/source/blender/nodes/composite/nodes/node_composite_switchview.c
+++ b/source/blender/nodes/composite/nodes/node_composite_switchview.c
@@ -23,6 +23,8 @@
*/
#include "BKE_context.h"
+#include "BKE_library.h"
+
#include "../node_composite_util.h"
/* **************** SWITCH VIEW ******************** */
@@ -122,6 +124,7 @@ static void init_switch_view(const bContext *C, PointerRNA *ptr)
/* store scene for updates */
node->id = (ID *)scene;
+ id_us_plus(node->id);
if (scene) {
RenderData *rd = &scene->r;
More information about the Bf-blender-cvs
mailing list