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

Reply via email to