On 18/04/17 03:51 PM, gregory hainaut wrote: > > However, I have found others crashes on PCSX2 with those patches. It > seems related to synchronization issue with GLX/DRI/X11. This series > removes most of the gl sync for PCSX2. So any missing sync will trigger > a crash. Or I got a not obvious bug in my patches. > > > Please find a backtrace below of a crash during a draw. I manage to get a > similar backtrace (i.e. > same exception in _XReply/dequeue_pending_request) when I call XGetGeometry. > > > #4 0xf61ec777 in __GI___assert_fail (assertion=0xf6122099 > "!xcb_xlib_unknown_req_in_deq", file=0xf6122067 "../../src/xcb_io.c", > line=179, function=0xf612248d <__PRETTY_FUNCTION__.14063> > "dequeue_pending_request") > at assert.c:101 > #5 0xf60abbcd in dequeue_pending_request (dpy=<optimized out>, > req=<optimized out>) at ../../src/xcb_io.c:185 > #6 0xf60aca17 in _XReply (dpy=0xe8fdde80, rep=0xcd46b910, extra=6, > discard=0) at ../../src/xcb_io.c:639 > #7 0xf3bba8df in DRI2GetBuffersWithFormat (dpy=0xe8fdde80, > drawable=83886261, width=0xd8ba11e8, height=0xd8ba11ec, > attachments=0xcd46ba38, count=1, outCount=0xcd46ba24) at dri2.c:485 > #8 0xf3bbac45 in dri2GetBuffersWithFormat (driDrawable=0xd8ba11d0, > width=0xd8ba11e8, height=0xd8ba11ec, attachments=0xcd46ba38, count=1, > out_count=0xcd46ba24, loaderPrivate=0xf225df10) at dri2_glx.c:894 > #9 0xd555e121 in dri2_drawable_get_buffers (count=<synthetic pointer>, > atts=0xa15f8b20, drawable=0xa2e50a00) at dri2.c:285 > #10 dri2_allocate_textures (ctx=0xd8b98810, drawable=0xa2e50a00, > statts=0xa15f8b20, statts_count=2) at dri2.c:480 > #11 0xd5557bc0 in dri_st_framebuffer_validate (stctx=0x9df20900, > stfbi=0xa2e50a00, statts=0xa15f8b20, count=2, out=0xcd46bb80) at > dri_drawable.c:83 > #12 0xd533ae8a in st_framebuffer_validate (stfb=stfb@entry=0xa15f8780, > st=st@entry=0x9df20900) at state_tracker/st_manager.c:189 > > > I don't have any clue on the GLX/DRI/X11 interaction with OpenGL. If > someone have any idea, feel free to share :)
Calling libX11 APIs (such as _XReply) for the same Display* from multiple threads is only safe if XInitThreads was called (and completed) before any other libX11 APIs were called. Since Mesa cannot enforce this, the only safe course of action is to only call libX11 APIs from one thread (at least for the time being; there are plans to make libX11 always behave as if XInitThreads was called first, but I'm not sure when it'll happen). -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev