ecore_signal.c: factoring out the platform test to improve readability.

Turns out there is no PRI?SIGATOMIC in the C99 standard. Work around
that by deducing the effective integer type by comparing the
SIG_ATOMIC_MAX with integers *MAX.

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Benjamin Jacobs 2016-06-06 11:14:55 -07:00 committed by Cedric BAIL
parent 180e64653d
commit b548a6396b
1 changed files with 30 additions and 55 deletions

View File

@ -2,6 +2,8 @@
# include <config.h> # include <config.h>
#endif #endif
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
@ -78,6 +80,22 @@ static volatile siginfo_t sigterm_info[MAXSIGQ];
static volatile siginfo_t sigpwr_info[MAXSIGQ]; static volatile siginfo_t sigpwr_info[MAXSIGQ];
#endif #endif
#if defined(SIG_ATOMIC_MAX)
# if SIG_ATOMIC_MAX == INT64_MAX
/* Basically FreeBSD on 64bits */
# define PRIdSIGATOMIC PRId64
# elif SIG_ATOMIC_MAX == UINT64_MAX
# define PRIdSIGATOMIC PRIu64
# elif SIG_ATOMIC_MAX == UINT32_MAX
# define PRIdSIGATOMIC PRIu32
# else
/* everybody else seems to go for int */
# define PRIdSIGATOMIC PRId32
# endif
#else
# define PRIdSIGATOMIC "d"
#endif
void void
_ecore_signal_shutdown(void) _ecore_signal_shutdown(void)
{ {
@ -168,30 +186,22 @@ _ecore_signal_call(void)
#endif #endif
sigprocmask(SIG_BLOCK, &newset, &oldset); sigprocmask(SIG_BLOCK, &newset, &oldset);
if (sigchld_count > MAXSIGQ) if (sigchld_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGCHLD in queue. max queue size %i. losing "
WRN("%ld SIGCHLD in queue. max queue size %i. losing "
"siginfo for extra signals.", sigchld_count, MAXSIGQ); "siginfo for extra signals.", sigchld_count, MAXSIGQ);
#else
WRN("%i SIGCHLD in queue. max queue size %i. losing "
"siginfo for extra signals.", sigchld_count, MAXSIGQ);
#endif
tot = sigchld_count + sigusr1_count + sigusr2_count + tot = sigchld_count + sigusr1_count + sigusr2_count +
sighup_count + sigquit_count + sigint_count + sigterm_count sighup_count + sigquit_count + sigint_count + sigterm_count
#ifdef SIGPWR #ifdef SIGPWR
+ sigpwr_count + sigpwr_count
#endif #endif
; ;
if (sig_count != tot) if (sig_count != tot)
{ {
#ifdef __FreeBSD__ ERR("sig_count (%"PRIdSIGATOMIC") != actual totals (%i) ",
ERR("sig_count (%ld) != actual totals (%i) ", sig_count, tot); sig_count, tot);
#else
ERR("sig_count (%i) != actual totals (%i) ", sig_count, tot);
#endif
sig_count = tot; sig_count = tot;
} }
for (n = 0; n < sigchld_count; n++) for (n = 0; n < sigchld_count; n++)
{ {
pid_t pid; pid_t pid;
@ -267,13 +277,8 @@ _ecore_signal_call(void)
sigchld_count = 0; sigchld_count = 0;
if (sigusr1_count > MAXSIGQ) if (sigusr1_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGUSR1 in queue. max queue size %i. losing "
WRN("%ld SIGUSR1 in queue. max queue size %i. losing "
"siginfo for extra signals.", sigusr1_count, MAXSIGQ); "siginfo for extra signals.", sigusr1_count, MAXSIGQ);
#else
WRN("%i SIGUSR1 in queue. max queue size %i. losing "
"siginfo for extra signals.", sigusr1_count, MAXSIGQ);
#endif
for (n = 0; n < sigusr1_count; n++) for (n = 0; n < sigusr1_count; n++)
{ {
Ecore_Event_Signal_User *e; Ecore_Event_Signal_User *e;
@ -294,13 +299,8 @@ _ecore_signal_call(void)
sigusr1_count = 0; sigusr1_count = 0;
if (sigusr2_count > MAXSIGQ) if (sigusr2_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGUSR2 in queue. max queue size %i. losing "
WRN("%ld SIGUSR2 in queue. max queue size %i. losing "
"siginfo for extra signals.", sigusr2_count, MAXSIGQ); "siginfo for extra signals.", sigusr2_count, MAXSIGQ);
#else
WRN("%i SIGUSR2 in queue. max queue size %i. losing "
"siginfo for extra signals.", sigusr2_count, MAXSIGQ);
#endif
for (n = 0; n < sigusr2_count; n++) for (n = 0; n < sigusr2_count; n++)
{ {
Ecore_Event_Signal_User *e; Ecore_Event_Signal_User *e;
@ -321,13 +321,8 @@ _ecore_signal_call(void)
sigusr2_count = 0; sigusr2_count = 0;
if (sighup_count > MAXSIGQ) if (sighup_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGHUP in queue. max queue size %i. losing "
WRN("%ld SIGHUP in queue. max queue size %i. losing "
"siginfo for extra signals.", sighup_count, MAXSIGQ); "siginfo for extra signals.", sighup_count, MAXSIGQ);
#else
WRN("%i SIGHUP in queue. max queue size %i. losing "
"siginfo for extra signals.", sighup_count, MAXSIGQ);
#endif
for (n = 0; n < sighup_count; n++) for (n = 0; n < sighup_count; n++)
{ {
Ecore_Event_Signal_Hup *e; Ecore_Event_Signal_Hup *e;
@ -346,13 +341,8 @@ _ecore_signal_call(void)
sighup_count = 0; sighup_count = 0;
if (sigquit_count > MAXSIGQ) if (sigquit_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGQUIT in queue. max queue size %i. losing "
WRN("%ld SIGQUIT in queue. max queue size %i. losing "
"siginfo for extra signals.", sigquit_count, MAXSIGQ); "siginfo for extra signals.", sigquit_count, MAXSIGQ);
#else
WRN("%i SIGQUIT in queue. max queue size %i. losing "
"siginfo for extra signals.", sigquit_count, MAXSIGQ);
#endif
for (n = 0; n < sigquit_count; n++) for (n = 0; n < sigquit_count; n++)
{ {
Ecore_Event_Signal_Exit *e; Ecore_Event_Signal_Exit *e;
@ -373,13 +363,8 @@ _ecore_signal_call(void)
sigquit_count = 0; sigquit_count = 0;
if (sigint_count > MAXSIGQ) if (sigint_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGINT in queue. max queue size %i. losing "
WRN("%ld SIGINT in queue. max queue size %i. losing "
"siginfo for extra signals.", sigint_count, MAXSIGQ); "siginfo for extra signals.", sigint_count, MAXSIGQ);
#else
WRN("%i SIGINT in queue. max queue size %i. losing "
"siginfo for extra signals.", sigint_count, MAXSIGQ);
#endif
for (n = 0; n < sigint_count; n++) for (n = 0; n < sigint_count; n++)
{ {
Ecore_Event_Signal_Exit *e; Ecore_Event_Signal_Exit *e;
@ -400,13 +385,8 @@ _ecore_signal_call(void)
sigint_count = 0; sigint_count = 0;
if (sigterm_count > MAXSIGQ) if (sigterm_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGTERM in queue. max queue size %i. losing "
WRN("%ld SIGTERM in queue. max queue size %i. losing "
"siginfo for extra signals.", sigterm_count, MAXSIGQ); "siginfo for extra signals.", sigterm_count, MAXSIGQ);
#else
WRN("%i SIGTERM in queue. max queue size %i. losing "
"siginfo for extra signals.", sigterm_count, MAXSIGQ);
#endif
for (n = 0; n < sigterm_count; n++) for (n = 0; n < sigterm_count; n++)
{ {
Ecore_Event_Signal_Exit *e; Ecore_Event_Signal_Exit *e;
@ -428,13 +408,8 @@ _ecore_signal_call(void)
#ifdef SIGPWR #ifdef SIGPWR
if (sigpwr_count > MAXSIGQ) if (sigpwr_count > MAXSIGQ)
#ifdef __FreeBSD__ WRN("%"PRIdSIGATOMIC" SIGPWR in queue. max queue size %i. losing "
WRN("%ld SIGPWR in queue. max queue size %i. losing "
"siginfo for extra signals.", sigpwr_count, MAXSIGQ); "siginfo for extra signals.", sigpwr_count, MAXSIGQ);
#else
WRN("%i SIGPWR in queue. max queue size %i. losing "
"siginfo for extra signals.", sigpwr_count, MAXSIGQ);
#endif
for (n = 0; n < sigpwr_count; n++) for (n = 0; n < sigpwr_count; n++)
{ {
Ecore_Event_Signal_Power *e; Ecore_Event_Signal_Power *e;