Hi Campbell, This fix causes problems with animated nodes.
The bugreport from venomgfx: "open blender > Shift+F3 > IKEY over the alpha slider, click anywhere.. crash" (this is on the output node) >From what I remember from trying to fix some bugs with the active node getting deselected/cleared immediately after being set, the problem is that a copy of the entire nodetree is made for every thread that does threaded/background compositing. This is results in many unpredicted consequences for the node API functions, such as this one. I'm not entirely sure what's going on here in this case though. Looks like the copying of animdata isn't happening (despite that being supposedly done on libblock level). For now, any users with this problem should just comment out the fix/changes here in node.c. Anyways, this is just a heads-up about this problem. I could investigate this further if the schedule over at the BI is too tight, otherwise, this'll have to wait till I get a few other pending issues sorted first :) Regards, Aligorith On Sun, Feb 14, 2010 at 2:38 AM, Campbell Barton <[email protected]>wrote: > Revision: 26869 > > http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26869 > Author: campbellbarton > Date: 2010-02-13 14:38:10 +0100 (Sat, 13 Feb 2010) > > Log Message: > ----------- > fix for memory leak: node animation data wasnt being free'd > > also some corrections to memory debug stuff. > > Modified Paths: > -------------- > trunk/blender/intern/guardedalloc/intern/mallocn.c > trunk/blender/source/blender/blenkernel/intern/node.c > trunk/blender/source/blender/blenloader/intern/readfile.c > > Modified: trunk/blender/intern/guardedalloc/intern/mallocn.c > =================================================================== > --- trunk/blender/intern/guardedalloc/intern/mallocn.c 2010-02-13 13:17:15 > UTC (rev 26868) > +++ trunk/blender/intern/guardedalloc/intern/mallocn.c 2010-02-13 13:38:10 > UTC (rev 26869) > @@ -305,9 +305,9 @@ > memset(memh+1, 255, len); > > #ifdef DEBUG_MEMCOUNTER > - memh->_count= _mallocn_count++; > if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) > memcount_raise("MEM_mallocN"); > + memh->_count= _mallocn_count++; > #endif > return (++memh); > } > @@ -330,9 +330,9 @@ > make_memhead_header(memh, len, str); > mem_unlock_thread(); > #ifdef DEBUG_MEMCOUNTER > - memh->_count= _mallocn_count++; > if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) > memcount_raise("MEM_callocN"); > + memh->_count= _mallocn_count++; > #endif > return (++memh); > } > @@ -372,9 +372,9 @@ > mmap_in_use += len; > mem_unlock_thread(); > #ifdef DEBUG_MEMCOUNTER > - memh->_count= _mallocn_count++; > if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) > memcount_raise("MEM_mapallocN"); > + memh->_count= _mallocn_count++; > #endif > return (++memh); > } > > Modified: trunk/blender/source/blender/blenkernel/intern/node.c > =================================================================== > --- trunk/blender/source/blender/blenkernel/intern/node.c 2010-02-13 > 13:17:15 UTC (rev 26868) > +++ trunk/blender/source/blender/blenkernel/intern/node.c 2010-02-13 > 13:38:10 UTC (rev 26869) > @@ -57,6 +57,7 @@ > #include "BKE_texture.h" > #include "BKE_text.h" > #include "BKE_utildefines.h" > +#include "BKE_animsys.h" /* BKE_free_animdata only */ > > #include "BLI_math.h" > #include "BLI_blenlib.h" > @@ -1343,6 +1344,8 @@ > > ntreeEndExecTree(ntree); /* checks for if it is still > initialized */ > > + BKE_free_animdata((ID *)ntree); > + > BLI_freelistN(&ntree->links); /* do first, then unlink_node goes > fast */ > > for(node= ntree->nodes.first; node; node= next) { > > Modified: trunk/blender/source/blender/blenloader/intern/readfile.c > =================================================================== > --- trunk/blender/source/blender/blenloader/intern/readfile.c 2010-02-13 > 13:17:15 UTC (rev 26868) > +++ trunk/blender/source/blender/blenloader/intern/readfile.c 2010-02-13 > 13:38:10 UTC (rev 26869) > @@ -5307,7 +5307,7 @@ > > while(bhead && bhead->code==DATA) { > void *data; > -#if 0 > +#if 0 > /* XXX DUMB DEBUGGING OPTION TO GIVE NAMES for guarded > malloc errors */ > short *sp= fd->filesdna->structs[bhead->SDNAnr]; > char *allocname = fd->filesdna->types[ sp[0] ]; > @@ -5315,8 +5315,9 @@ > > strcpy(tmp, allocname); > data= read_struct(fd, bhead, tmp); > +#else > + data= read_struct(fd, bhead, allocname); > #endif > - data= read_struct(fd, bhead, allocname); > > if (data) { > oldnewmap_insert(fd->datamap, bhead->old, data, 0); > > > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
