Hi, I should have seen this coming after fixing the roughly corresponding _init() locking issue:
When MainWin apps exit, they hang: > (gdb) bt > #0 0x0000003b7c009481 in pthread_mutex_lock () from /lib64/libpthread.so.0 > #1 0x0000003b7b4110f7 in tls_get_addr_tail () from > /lib64/ld-linux-x86-64.so.2 > #2 0x0000003b7b411500 in __tls_get_addr () from /lib64/ld-linux-x86-64.so.2 > #3 0x00007f99c915035c in (anonymous namespace)::get_global() () from > /usr/lib64/libopentextglfaker.so.3 > #4 0x00007f99c9150372 in __cxa_get_globals () from > /usr/lib64/libopentextglfaker.so.3 > #5 0x00007f99c91591da in __cxa_allocate_exception () from > /usr/lib64/libopentextglfaker.so.3 > #6 0x00007f99c914e67a in vglutil::CriticalSection::lock(bool) () from > /usr/lib64/libopentextglfaker.so.3 > #7 0x00007f99c90de0e8 in fconfig_instance() () from > /usr/lib64/libopentextglfaker.so.3 > #8 0x00007f99c90db156 in xcb_poll_for_event () from > /usr/lib64/libopentextglfaker.so.3 > #9 0x00007f99c3e34b04 in poll_for_event () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux/X11/libX11.so.6 > #10 0x00007f99c3e35398 in _XReply () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux/X11/libX11.so.6 > #11 0x00007f99c3e1b941 in XGetSelectionOwner () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux/X11/libX11.so.6 > #12 0x00007f99c04dbe85 in ProtectedXGetSelectionOwner () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux_optimized/libgdiuser32.so > #13 0x00007f99c048101f in MwLockXServer () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux_optimized/libgdiuser32.so > #14 0x00007f99c0489e43 in MwMainwinClose () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux_optimized/libgdiuser32.so > #15 0x00007f99c0489e87 in MwIExitProcess () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux_optimized/libgdiuser32.so > #16 0x00007f99bfecd7a8 in proc_cleanup() () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux_optimized/libkernel32.so > #17 0x00007f99c00b4882 in __do_global_dtors_aux () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux_optimized/libadvapi32.so > #18 0x00007fff5e35ecc0 in ?? () > #19 0x00007f99c00c9731 in _fini () > from > /usr/local/ansys_inc/AnsysEM/AnsysEM15.0/Linux64/mainwin540/Linux64/mw/lib-amd64_linux_optimized/libadvapi32.so > #20 0x000000000000004a in ?? () > #21 0x0000003b7b40ec7c in _dl_fini () from /lib64/ld-linux-x86-64.so.2 Tested official 2.5 bins from This naive patch works around this specific case, though obviously it isn't a general solution: diff --git a/server/faker-xcb.cpp b/server/faker-xcb.cpp index f6f2d23..661cd1f 100644 --- a/server/faker-xcb.cpp +++ b/server/faker-xcb.cpp @@ -224,7 +224,7 @@ xcb_generic_event_t *xcb_poll_for_event(xcb_connection_t *conn) TRY(); - if((e=_xcb_poll_for_event(conn))!=NULL && fconfig.fakeXCB + if((e=_xcb_poll_for_event(conn))!=NULL && !isDead() && fconfig.fakeXCB && vglfaker::getFakerLevel()==0) handleXCBEvent(conn, e); I be be AFK for a few days, but posting early to to let you mull over. -Nathan ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ VirtualGL-Devel mailing list VirtualGL-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/virtualgl-devel