[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