Yay! Finally figured it out. Please disregard my netsend patch, it's basically treating symptoms rather than the source.
It turns out that the patch I submitted before to fix canvas GOP toggle on/apply/off/apply crash has been the cause of the problem all along mainly because the final version had the second part nested, causing a lot of problems at close time. Namely, the old version is like this (prior to my patch): void canvas_destroy_editor(t_glist *x) { t_gobj *y; t_object *ob; if (x->gl_editor) { for (y = x->gl_list; y; y = y->g_next) if (ob = pd_checkobject(&y->g_pd)) rtext_free(glist_findrtext(x, ob)); editor_free(x->gl_editor, x); x->gl_editor = 0; } } The currently broken patched version (the one I proposed earlier) is: void canvas_destroy_editor(t_glist *x) { t_gobj *y; t_object *ob; if (x->gl_editor) glist_noselect(x); if (x->gl_editor && x->gl_list) { if (x->gl_list) { for (y = x->gl_list; y; y = y->g_next) if (ob = pd_checkobject(&y->g_pd)) rtext_free(glist_findrtext(x, ob)); //notice how this part is never reached if x->gl_list //condition is not satisfied, yet it is reached in //previous version... //this is the cause of //problems I've been experiencing if (x->gl_editor) { editor_free(x->gl_editor, x); x->gl_editor = 0; } } } } Sooooo, here's the correct version which still resolves two issues pointed out before without introducing any known regressions. The issues once again are: #1 crash when creating a new patch->create a sub-patch->open sub-patch properties->enable GOP->apply->disable GOP (without closing properties)->apply #2 crash when creating a new patch->create a sub-patch->create an object *and leave elected->open sub-patch properties->enable GOP->apply->disable GOP (without closing properties)->apply CORRECT VERSION: void canvas_destroy_editor(t_glist *x) { t_gobj *y; t_object *ob; glist_noselect(x); //necessary to resolve crash #2 if (x->gl_editor) { if (x->gl_list) { //necessary to resolve crash #1 for (y = x->gl_list; y; y = y->g_next) if (ob = pd_checkobject(&y->g_pd)) rtext_free(glist_findrtext(x, ob)); } //fix to make this condition independent from x->gl_list if (x->gl_editor) { editor_free(x->gl_editor, x); x->gl_editor = 0; } } } Cheers! ico _______________________________________________ Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev