[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

Joshua Leung aligorith at gmail.com
Mon Feb 15 02:41:27 CET 2010


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
>


More information about the Bf-committers mailing list