gmain: Use sig_atomic_t for list of pending Unix signals

Pointed out by: Simon McVittie <simon.mcvittie@collabora.co.uk>

https://bugzilla.gnome.org/show_bug.cgi?id=671997
This commit is contained in:
Colin Walters 2012-03-13 14:49:04 -04:00
parent f3fca56b7e
commit 6833385c5a
2 changed files with 19 additions and 2 deletions

View File

@ -577,6 +577,18 @@ AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(long long)
AC_CHECK_SIZEOF(__int64) 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 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 else

View File

@ -388,8 +388,13 @@ static GMainContext *default_main_context;
/* UNIX signals work by marking one of these variables then waking the /* UNIX signals work by marking one of these variables then waking the
* worker context to check on them and dispatch accordingly. * worker context to check on them and dispatch accordingly.
*/ */
static volatile gchar unix_signal_pending[NSIG]; #ifdef HAVE_SIG_ATOMIC_T
static volatile gboolean any_unix_signal_pending; 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 */ /* Guards all the data below */
G_LOCK_DEFINE_STATIC (unix_signal_lock); G_LOCK_DEFINE_STATIC (unix_signal_lock);