diff --git a/src/g_array.c b/src/g_array.c index bafe8ac07f02017ebea19fab2cdb6ca04c744a5c..b3e5fed109eb065e5f02bc91957ad39ed2adc06f 100644 --- a/src/g_array.c +++ b/src/g_array.c @@ -138,7 +138,8 @@ struct _garray t_symbol *x_send; /* send_changed hook */ }; -static t_pd *garray_arraytemplatecanvas; +t_pd *garray_arraytemplatecanvas; +t_pd *garray_floattemplatecanvas; static char garray_arraytemplatefile[] = "\ #N canvas 0 0 458 153 10;\n\ #X obj 43 31 struct _float_array array z float float style\n\ @@ -163,6 +164,7 @@ void garray_init( void) glob_setfilename(0, gensym("_float"), gensym(".")); binbuf_text(b, garray_floattemplatefile, strlen(garray_floattemplatefile)); binbuf_eval(b, 0, 0, 0); + garray_floattemplatecanvas = s__X.s_thing; vmess(s__X.s_thing, gensym("pop"), "i", 0); glob_setfilename(0, gensym("_float_array"), gensym(".")); @@ -172,7 +174,7 @@ void garray_init( void) vmess(s__X.s_thing, gensym("pop"), "i", 0); glob_setfilename(0, &s_, &s_); - binbuf_free(b); + binbuf_free(b); } /* create a new scalar attached to a symbol. Used to make floating-point diff --git a/src/s_inter.c b/src/s_inter.c index d2226f3e69f732c8603d6bced232b9a88e63620b..1cf70a6aef1b067ba4349b7a324c4d6e54aca6bd 100644 --- a/src/s_inter.c +++ b/src/s_inter.c @@ -1311,28 +1311,14 @@ void sys_bail(int n) else _exit(1); } +extern t_pd *garray_arraytemplatecanvas; +extern t_pd *garray_floattemplatecanvas; + void glob_quit(void *dummy) { - /* deallocate rendundant memory (see g_canvas.c canvas_new and g_canvas.h for struct declaration */ -/* - if (rm_start) { - while (rm_start->rm_next) { - t_redundant_mem *tmp = rm_start; - rm_start = rm_start->rm_next; - // we can also explicitly look for deallocating per-canvas settings here, if such proves necessary - // to do so, look at rm_start->rm_canvas - - //fprintf(stderr,".x%lx\n", tmp->rm_canvas); - t_freebytes(tmp, sizeof(*tmp)); - //fprintf(stderr,"dealloc\n"); - } - if (rm_start) { - t_freebytes(rm_start, sizeof(*rm_start)); - //fprintf(stderr,"last dealloc\n"); - } - } -*/ - + //let's try to cleanly remove invisible template canvases to avoid memory leaks + if (garray_arraytemplatecanvas) canvas_free( (t_canvas *)garray_arraytemplatecanvas); + if (garray_floattemplatecanvas) canvas_free( (t_canvas *)garray_floattemplatecanvas); sys_vgui("exit\n"); if (!sys_nogui) {