Deadly leak hits me, and my students, regularly and annoyingly when we are patching in a certain way.
I don't know about other bugs. This one is really not as convoluted as you suggest -- its fatal consequences are, perhaps, but not the bug itself.
The real source of the bug is not freeing the GOP's editor. The fix is either to free it, for example by a recursive traversal in canvas_destroy_editor(), or to rework the g_text.c so as not to need the editor in the first place.
The editor is created whenever there is a gatom inside of a GOP -- because vised gatoms use text responders (aka rtexts).
For the time being the workaround, when patching, is not using rtexts (read: gatoms) in a GOP.
Krzysztof
Wow! You just helped me finally solve this riddle! Could it be really this simple? In canvas_free() call inside g_canvas.c simply add the following 2 lines:
if (x->gl_editor) canvas_destroy_editor(x);
I added them right below
if (x == glist_getcanvas(x)) canvas_vis(x, 0);
Now even if the canvas is recreated with the same memory space there is no more double-entry bug. Are there any potential regressions with this model? The canvas is getting freed so I cannot imagine this posing any problems but then again I am sure I may be missing something...
Any thoughts?