macos: dispose loop in gdkglcontext
If I open gtk4-demo and I launch any of the demos and then close the window, it will endup crashing. As we can see in the bt below there is a loop disposing the context.
For some reason the g_private_replace is called producing yet another call to the dispose of the macos gl context, then once again it enters in the glcontext dispose and calls again g_private_replace ending up in a loop of disposing until it crashes.
Clearly if I change that g_private_replace to g_private_set then the crash does not happen but the gl context seems to be leaked in some cases.
Any ideas are welcomed here...
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff0)
* frame #0: 0x000000010154a714 libgobject-2.0.0.dylib`lookup_type_node_I(utype=<unavailable>) at gtype.c:395
frame #1: 0x0000000101550eb4 libgobject-2.0.0.dylib`g_type_check_instance_is_fundamentally_a(type_instance=0x000000010602b1c0, fundamental_type=80) at gtype.c:4028:10
frame #2: 0x000000010152d8da libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3400:3
frame #3: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #4: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #5: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #6: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #7: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #8: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #9: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #10: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #11: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #12: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #13: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #14: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #15: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #16: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #17: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #18: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #19: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #20: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #21: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #22: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #23: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #24: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #25: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #26: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #27: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #28: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #29: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #30: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #31: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #32: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #33: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3
frame #34: 0x000000010152da98 libgobject-2.0.0.dylib`g_object_unref(_object=0x000000010602b1c0) at gobject.c:3465:7
frame #35: 0x00000001013e8f25 libglib-2.0.0.dylib`g_private_replace(key=0x0000000100f49028, value=0x0000000000000000) at gthread-posix.c:1120:5
frame #36: 0x0000000100c8e63d libgtk-4.1.dylib`gdk_gl_context_dispose(gobject=0x000000010602b1c0) at gdkglcontext.c:165:5
frame #37: 0x0000000100cb9fce libgtk-4.1.dylib`gdk_macos_gl_context_dispose(gobject=0x000000010602b1c0) at gdkmacosglcontext.c:423:3