gmain: Use sig_atomic_t for list of pending Unix signals
authorColin Walters <walters@verbum.org>
Tue, 13 Mar 2012 18:49:04 +0000 (14:49 -0400)
committerColin Walters <walters@verbum.org>
Fri, 16 Mar 2012 20:15:16 +0000 (16:15 -0400)
Pointed out by: Simon McVittie <simon.mcvittie@collabora.co.uk>

https://bugzilla.gnome.org/show_bug.cgi?id=671997

configure.ac
glib/gmain.c

index 88a2011..f5197ec 100644 (file)
@@ -577,6 +577,18 @@ AC_CHECK_SIZEOF(void *)
 AC_CHECK_SIZEOF(long long)
 AC_CHECK_SIZEOF(__int64)
 
+AC_CACHE_CHECK([for sig_atomic_t], ac_cv_type_sig_atomic_t,
+  [AC_TRY_LINK([#include <signal.h>
+     #include <sys/types.h>
+     sig_atomic_t val = 42;],
+    [return val == 42 ? 0 : 1],
+   ac_cv_type_sig_atomic_t=yes,
+   ac_cv_type_sig_atomic_t=no)])
+if test x$ac_cv_type_sig_atomic_t = xyes; then
+   AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
+     [Define if you have the 'sig_atomic_t' type.])
+fi
+
 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
   :
 else
index e37744a..077a935 100644 (file)
@@ -388,8 +388,13 @@ static GMainContext *default_main_context;
 /* UNIX signals work by marking one of these variables then waking the
  * worker context to check on them and dispatch accordingly.
  */
-static volatile gchar unix_signal_pending[NSIG];
-static volatile gboolean any_unix_signal_pending;
+#ifdef HAVE_SIG_ATOMIC_T
+static volatile sig_atomic_t unix_signal_pending[NSIG];
+static volatile sig_atomic_t any_unix_signal_pending;
+#else
+static volatile int unix_signal_pending[NSIG];
+static volatile int any_unix_signal_pending;
+#endif
 
 /* Guards all the data below */
 G_LOCK_DEFINE_STATIC (unix_signal_lock);