<p>Just do XInitThreads once at the top of your program. Not that difficult.</p>
<p>Posting from a mobile, pardon my terseness. ~ C.</p>
<p><blockquote type="cite">On Jul 20, 2010 12:53 AM, "Francesco Abbate" <<a href="mailto:francesco.bbt@gmail.com">francesco.bbt@gmail.com</a>> wrote:<br><br>Hi all,<br>
<br>
I've a problem with a multi threaded application were multiple threads<br>
access to Xlib concurrently. In order to make things safe I've<br>
implemented a lock mechanism but I still experiment some intermittent<br>
(rare) problems with XSync that hang sometimes.<br>
<br>
Let me explain how I have arranged the locks for the multiple threads.<br>
<br>
There is a thread, lets say the main thread that poll the events and<br>
process them as needed. In order to make things safer all the<br>
operations are locked and the thread unlocks only during the blocking<br>
event polling. So I have something like that:<br>
<br>
...<br>
my_application_unlock();<br>
XNextEvent(m_display, &m_event);<br>
my_application_lock();<br>
...<br>
<br>
The other thread, lets say the secondary thread, perform other stuff<br>
not related to the Xlib but, in some cases it does need to force an<br>
update on the Window. In order to perform this operation it does<br>
acquire the lock (the same as the main thread of course) and perform<br>
two operations: an XPutImage and an XSync with a "true" flag to<br>
discards incoming events. So I have something like that for the second<br>
thread:<br>
<br>
my_application_lock();<br>
XPutImage(...);<br>
XSync(m_display, true);<br>
my_application_unlock();<br>
<br>
The logic of this approach is that we let the secondary thread perform<br>
the XPutImage, XSync operation only when the main thread is polling<br>
events and is probably blocked anyway. This approach does not work and<br>
sometimes the XSync hang I don't know why.<br>
<br>
Should I use the XInitThread functions and the related locks to fix<br>
the problems or I need to adopt some other approach ?<br>
Any help or suggestions is highly appreciated. Thank you in any case.<br>
<br>
Best regards,<br>
Francesco Abbate<br>
<br>
PS: may be I can mention that on M$ Windoze the same kind of approach<br>
is apparently working without any problem.<br>
_______________________________________________<br>
<a href="mailto:xorg@lists.freedesktop.org">xorg@lists.freedesktop.org</a>: X.Org support<br>
Archives: <a href="http://lists.freedesktop.org/archives/xorg" target="_blank">http://lists.freedesktop.org/archives/xorg</a><br>
Info: <a href="http://lists.freedesktop.org/mailman/listinfo/xorg" target="_blank">http://lists.freedesktop.org/mailman/listinfo/xorg</a><br>
Your subscription address: <a href="mailto:mostawesomedude@gmail.com">mostawesomedude@gmail.com</a><br>
</blockquote></p>