[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26869] trunk/blender: fix for memory leak : node animation data wasnt being free'd

Campbell Barton ideasman42 at gmail.com
Mon Feb 15 09:51:03 CET 2010


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 <ideasman42 at 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 <aligorith at 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 <ideasman42 at 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-cvs at blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>>
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>>
>
>
>
> --
> - Campbell
>



-- 
- Campbell


More information about the Bf-committers mailing list