From 3a6563d039e38a171ce5a5c09ecfe7981797e2c4 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Mon, 22 Apr 2013 15:29:43 +0200 Subject: Use new glib threading API The gthread library has been merged in glib and the threading API has changed a little. Since changes are negligible, there's no point of losing support of older glib releases, thus make it conditional. --- configure.ac | 6 ++++++ src/cgg.c | 2 ++ src/job-manager.c | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index cc2c10e..f439459 100644 --- a/configure.ac +++ b/configure.ac @@ -75,6 +75,12 @@ dnl ************************************************** AC_CHECK_LIB(glib-2.0, g_get_num_processors, [ AC_DEFINE(HAVE_G_GET_NUM_PROCESSORS, 1, [Define if glib has g_get_num_processors()])]) +dnl ************************************************** +dnl *** Check for new glib threading API *** +dnl ************************************************** +AC_CHECK_LIB(glib-2.0, g_thread_new, [ + AC_DEFINE(HAVE_GLIB_NEW_THREADS, 1, [Define if glib has new threading API])]) + dnl ************************************************** dnl *** Check for EXIV2 version *** diff --git a/src/cgg.c b/src/cgg.c index 4bff606..2891f6f 100644 --- a/src/cgg.c +++ b/src/cgg.c @@ -125,7 +125,9 @@ main (int argc, char* argv[]) */ LIBXML_TEST_VERSION; +#ifndef HAVE_GLIB_NEW_THREADS g_thread_init (NULL); +#endif /* Initialize ImageMagick at this point, for multithreading safety */ MagickWandGenesis(); diff --git a/src/job-manager.c b/src/job-manager.c index 8044b7f..fd41550 100644 --- a/src/job-manager.c +++ b/src/job-manager.c @@ -370,7 +370,11 @@ build_tree (TGallerySetup *setup, for (i = 0; i < jobs; i++) { error = NULL; +#ifdef HAVE_GLIB_NEW_THREADS + thread = g_thread_try_new (NULL, thread_func, job, &error); +#else thread = g_thread_create (thread_func, job, TRUE, &error); +#endif if (thread) thread_list = g_list_append (thread_list, thread); if (error) { @@ -381,9 +385,9 @@ build_tree (TGallerySetup *setup, /* wait for threads are finished */ for (l = thread_list; l != NULL; l = l->next) { + /* also unrefs the thread instance */ g_thread_join (l->data); } - /* TODO: free threads? */ g_list_free (thread_list); #else /* threads are disabled */ -- cgit v1.2.3