• Eric Pouech's avatar
    Reorganizing wine-devel: · e86389e0
    Eric Pouech authored
    - killing the advanced part (and moving its chapters in both
      developing Wine and Wine archi parts)
    - creating a new book on coding practices from i18n.sgml, patches.sgml
      and porting.sgml
    - creating a new book on some debugging strategies from the old
      advanced book and cvs-regression.sgml
    - creating a new book on the kernel modules (NTDLL & KERNEL32) from
      architecture.sgml / related DLLs and address-space.sgml,
      console.sgml, threading.sgml
    - creating a new book on the windowing from architecture.sgml / USER32
      and related
    - creating a new book on the graphical parts from architecture.sgml /
      GDI32 and related
    Other changes:
    - removed list of DLLs and their role (from the modules overview)
    - removed in X11 keyboard mapping section the part related to submit a
      patch
    e86389e0
winedev-graphical.sgml 1.39 KB
  <chapter>
    <title>Graphical modules</title>
    <sect1>
      <title>GDI Module</title>

      <sect2>
	<title>X Windows System interface</title>

	<para>
	  The X libraries used to implement X clients (such as Wine)
	  do not work properly if multiple threads access the same
	  display concurrently. It is possible to compile the X
	  libraries to perform their own synchronization (initiated
	  by calling <function>XInitThreads()</function>). However,
	  Wine does not use this approach. Instead Wine performs its
	  own synchronization using the
	  <function>wine_tsx11_lock()</function> / <function>wine_tsx11_unlock()</function>
	  functions.  This locking protects library access
	  with a critical section, and also arranges things so that
	  X libraries compiled without <option>-D_REENTRANT</option>
	  (eg. with global <varname>errno</varname> variable) will
	  work with Wine.
	</para>
	<para>
	  In the past, all calls to X used to go through a wrapper called
	  <function>TSX...()</function> (for "Thread Safe X ...").
	  While it is still being used in the code, it's inefficient
	  as the lock is potentially aquired and released unnecessarily.
	  New code should explicitly aquire the lock.
	</para>
      </sect2>
    </sect1>
  </chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-parent-document:("wine-devel.sgml" "set" "book" "part" "chapter" "")
End:
-->