On 24/11/14 12:23 PM, DRC wrote: > I think it might be prudent to enable it only with a 'vglrun +xcb' > switch or something like that. I just predict that this is not the > last we've heard of issues like this.
Oooh, here's a nice one: xcb_get_extension_data doesn't just say "Yes I have GLX". It also returns the extension major opcode that xcb_send_request uses for the io vector index. So when the VGL_PROBEGLX code does its thing we get: #0 XGetXCBConnection (dpy=0x608620) at x11_xcb.c:9 #1 0x00007ffff78d23b6 in _XGetXCBConnection (dpy=0x608620) at /home/nathan/src/virtualgl/server/faker-sym.h:529 #2 0x00007ffff78e97e9 in xcb_get_extension_data (conn=0x61a3a0, ext=0x7ffff5b90050 <xcb_glx_id>) at /home/nathan/src/virtualgl/server/faker-xcb.cpp:149 #3 0x00007ffff55607d8 in xcb_send_request (c=c@entry=0x61a3a0, flags=flags@entry=1, vector=vector@entry=0x7fffffffda50, req=req@entry=0x7ffff5b8f950 <xcb_req.12371>) at xcb_out.c:177 #4 0x00007ffff59850b2 in xcb_glx_query_server_string (c=c@entry=0x61a3a0, screen=screen@entry=0, name=name@entry=2) at glx.c:2375 #5 0x00007ffff76a057e in __glXQueryServerString (dpy=dpy@entry=0x619150, opcode=<optimized out>, screen=screen@entry=0, name=name@entry=2) at glx_query.c:47 #6 0x00007ffff7682dd6 in AllocAndFetchScreenConfigs (priv=0x679dc0, dpy=0x619150) at glxext.c:764 #7 __glXInitialize (dpy=dpy@entry=0x619150) at glxext.c:879 #8 0x00007ffff767f71b in GetGLXPrivScreenConfig (dpy=0x619150, scrn=0, ppriv=ppriv@entry=0x7fffffffdb20, ppsc=ppsc@entry=0x7fffffffdb28) at glxcmds.c:174 #9 0x00007ffff767f7ab in GetGLXPrivScreenConfig (ppsc=0x7fffffffdb28, ppriv=0x7fffffffdb20, scrn=<optimized out>, dpy=<optimized out>) at glxcmds.c:170 #10 glXGetConfig (dpy=<optimized out>, vis=0x631630, attribute=5, value_return=0x63a1b8) at glxcmds.c:880 #11 0x00007ffff78fd498 in _glXGetConfig (dpy=0x619150, vis=0x631630, attrib=5, value=0x63a1b8) at /home/nathan/src/virtualgl/server/faker-sym.h:178 #12 0x00007ffff78fddf8 in buildVisAttribTable (dpy=0x619150, screen=0) at /home/nathan/src/virtualgl/server/glxvisual.cpp:131 #13 0x00007ffff78fee96 in __vglMatchVisual (dpy=0x619150, screen=0, depth=24, c_class=4, level=0, stereo=0, trans=0) at /home/nathan/src/virtualgl/server/glxvisual.cpp:354 #14 0x00007ffff78dc484 in glXChooseVisual (dpy=0x619150, screen=0, attrib_list=0x7fffffffdf00) at /home/nathan/src/virtualgl/server/faker-glx.cpp:424 #15 0x0000000000405909 in main (argc=2, argv=0x7fffffffe078) at /home/nathan/src/virtualgl/glxdemos/glxspheres.c:602 (gdb) c Continuing. [VGL] !!! Replaced xcb connection 0x61a3a0 with 0x609950 from xcb_get_extension_data Breakpoint 7, xcb_glx_query_server_string_string_length (R=R@entry=0x0) at glx.c:2448 2448 glx.c: No such file or directory. (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. xcb_glx_query_server_string_string_length (R=R@entry=0x0) at glx.c:2448 I.e. xcb_glx_query_server_string fails because the data tries to send on wrong iovector, and glXQueryServerString isn't prepared to handle a failure. This is on an OpenSuSE 13.1 box with Mesa 9.x + Nouveau, and doesn't happen on modern Mesa or with NVIDIA's binary, but it demonstrates the pitfalls of hooking an API that is used by the underlying implementation, not just applications. Ways I can think of to work around this: 1) just disallow any non-3D-server GLX traffic, and loose the VGL_PROBEGLX benefits. Hmmm, this looks like it kills the possibility of stereo support, though I've never seen a stereo user. 2) Introduce a global (TLS-based should work) don't-fake-xcb-for-now flag that the VGL_PROBEGLX code sets and the XCB hooks honour. -Nathan ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk _______________________________________________ VirtualGL-Devel mailing list VirtualGL-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/virtualgl-devel