diff --git a/configure.ac b/configure.ac index 88a20114d..f5197ecbe 100644 --- a/configure.ac +++ b/configure.ac @@ -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 + #include + 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 diff --git a/glib/gmain.c b/glib/gmain.c index e37744a59..077a9354c 100644 --- a/glib/gmain.c +++ b/glib/gmain.c @@ -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);