made nodetrees copy animdata (and ID props) when part of a material, seems to fix but needs further testing too.
On Mon, Feb 15, 2010 at 9:07 AM, Campbell Barton <ideasma...@gmail.com> wrote: > Hey Aligorith, I'll have a go at fixing this, otherwise I'll comment > out with some warning/printf that memory is being leaked and the bug > is known. > > On Mon, Feb 15, 2010 at 2:41 AM, Joshua Leung <aligor...@gmail.com> wrote: >> 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 <ideasma...@gmail.com>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 >>> bf-blender-...@blender.org >>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs >>> >> _______________________________________________ >> Bf-committers mailing list >> Bf-committers@blender.org >> http://lists.blender.org/mailman/listinfo/bf-committers >> > > > > -- > - Campbell > -- - Campbell _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers