[patch] Multiple/Java thread support



I've uploaded gtk-rao-980910-0.patch.gz to incoming.  The patch is
against the CVS tree as of approximately 11:00AM EDT.  If anyone would
like a patch for gtk+-1.1.1, please send me an email.

README:

Multiple Thread Library Support + Java Thread Support

GTK's current threading primitives are hardcoded for pthreads.  The
GNU Classpath Project (http://www.classpath.org) is writing a Java AWT
implementation using GTK+.  As such, we needed to make gdkthreads work
with the threading facilities provided by the Java Virtual Machine.
As opposed to adding the ability to compile GTK for either pthreads or
JNI (java) threads, I went ahead and extended GTK's threading
primitives to easily switch between different thread implementations
based on the application using libgtk.  It should now be trivial to
add new thread library support -- such as cthreads or Sun threads.

The new threading calls are structured as follows:

gboolean gdk_threads_init (GdkThreadsType threads_type, ...);
void gdk_threads_enter (GdkThreadsType threads_type, ...);
void gdk_threads_leave (GdkThreadsType threads_type, ...);

GdkThreadsType is defined as:

typedef enum
{
  GDK_THREADS_INTERNAL, /* calls from within the GDK thread */
  GDK_THREADS_PTHREADS, /* posix threads */
  GDK_THREADS_JNI       /* java threads */
} GdkThreadsType;

A GTK application requests what type of threading it would like for
GDK to use, by passing a GdkThreadsType to gdk_threads_init.  Varargs
are used accordingly if the GdkThreadsType needs any initialization
parameters.  The same calling convention is used for
gdk_threads_{enter/leave}.

Whenever GDK internally calls gdk_threads_{enter/leave},
GDK_THREADS_INTERNAL is passed without any extra parameters, as any
needed thread info was passed in with the original init.  Thus, under
certain threading libraries, there may be a requirement that the
thread calling gdk_threads_init is also the thread which runs the
event loop.

Java threads require the varargs to pass in a Java interface pointer
which is associated with the calling thread.  Pthreads do not have
this type of requirement.

So all the old pthreads code of the form:

gdk_threads_init ();
...
gdk_threads_enter ();
[gtk calls]
gdk_threads_leave ();

now becomes:

gdk_threads_init (GDK_THREADS_PTHREADS);
...
gdk_threads_enter (GDK_THREADS_PTHREADS);
[gtk calls]
gdk_threads_leave (GDK_THREADS_PTHREADS);

Java threads are called in the following manner, where "env" is the
Java interface pointer (type: JNIEnv *).

gdk_threads_init (GDK_THREADS_JNI, env);
...
gdk_threads_enter (GDK_THREADS_JNI, env);
[gtk calls]
gdk_threads_leave (GDK_THREADS_JNI, env);

For any thread calls within GDK, regardless of the threading type the
application has requested, the following form is used:

gdk_threads_enter (GDK_THREADS_INTERNAL);
...
gdk_threads_leave (GDK_THREADS_INTERNAL);

configure.in has been modified as well.  --with-threads has been
removed, and --with-posix-threads and --with-java-threads have been
added.  If --with-posix-threads is successful, USE_PTHREADS is
defined.  If --with-java-threads is successful, USE_JNI_THREADS is
defined.  If either is successful, USE_THREADS is defined, and
-D_REENTRANT is added to the CFLAGS.

PATCH:

begin 664 gtk-rao-980910-0.patch.gz
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
2S;3\A)(*P\)_`$[H[9`,)@``
`
end

-- 
Paul Fisher * rao@gnu.org



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]