On 03/07/2013 06:31 AM, Torsten Jager wrote:
Hello!

What is the proper usage of XLockDisplay () / XUnlockDisplay ()
when an application has multiple threads using

   * "normal" Xlib functions
   * Xitk functions
   * libGL and/or
   * libvdpau ?

XLockDisplay / XUnlockDisplay is only required when you need multiple requests to be atomic with respect to requests being sent by other threads. For example, if you have a function like

XGrabServer()
XGetImage()
XUngrabServer()

then you'll probably want to bracket the whole thing with XLockDisplay / XUnlockDisplay if you have another thread that could otherwise perform rendering during the grab or destroy the window you're trying to GetImage or something.

On my machine (libX11 1.4.0) bracketing all 4 seems to be necessary
to avoid lockups and stack corruption. At least doing so does
work here.

You shouldn't get lockups unless you take the lock in one thread and don't release it. You did call XInitThreads() as the very first thing, right?

Hovever, on my mate's box the same code traps both libGL and
libvdepau into an infinite sched_yield () polling loop.

Sounds like a bug.

What am I doing wrong?

My guess would be calling XInitThreads too late. You have to call it before anything else, including libraries like libGL and libvdpau, make any Xlib calls.

Torsten

--
Aaron
_______________________________________________
xorg@lists.x.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: http://lists.x.org/mailman/listinfo/xorg
Your subscription address: arch...@mail-archive.com

Reply via email to