Build Version : T2.0.0.6642 Firebird 2.0 UNSTABLE
(writeBuildNum.sh,v 1.6644 2004/03/08 02:06:33 skidder Exp )
Update of /cvsroot/firebird/firebird2/src/jrd/os/posix
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27496
Modified Files:
isc_ipc.cpp
Log Message:
Use lesser common denominator when handling signals
Index: isc_ipc.cpp
===================================================================
RCS file: /cvsroot/firebird/firebird2/src/jrd/os/posix/isc_ipc.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -b -U3 -r1.7 -r1.8
--- isc_ipc.cpp 11 Nov 2003 12:17:35 -0000 1.7
+++ isc_ipc.cpp 8 Mar 2004 02:06:30 -0000 1.8
@@ -91,7 +91,7 @@
int sig_signal;
union {
FPTR_VOID_PTR user;
- void (*client) (int, siginfo_t*, void*);
+ void (*client) (int);
FPTR_INT_VOID_PTR informs;
FPTR_VOID untyped;
} sig_routine;
@@ -130,9 +130,7 @@
static SLONG overflow_handler(void* arg);
static SIG que_signal(int signal, FPTR_VOID handler, void* arg, int flags);
-static void CLIB_ROUTINE signal_handler(int number,
- siginfo_t* info,
- void* pointer);
+static void CLIB_ROUTINE signal_handler(int number);
#ifndef SIG_HOLD
#define SIG_HOLD SIG_DFL
@@ -233,7 +231,6 @@
}
-#ifdef UNIX
int ISC_kill(SLONG pid, SLONG signal_number)
{
/**************************************
@@ -296,7 +293,6 @@
return 0;
}
-#endif
void API_ROUTINE ISC_signal(int signal_number, FPTR_VOID_PTR handler, void* arg)
@@ -353,24 +349,26 @@
if (!sig) {
struct sigaction act, oact;
- act.sa_sigaction = signal_handler;
- act.sa_flags = SA_RESTART | SA_SIGINFO;
+ act.sa_handler = signal_handler;
+ act.sa_flags = SA_RESTART;
sigemptyset(&act.sa_mask);
sigaddset(&act.sa_mask, signal_number);
sigaction(signal_number, &act, &oact);
- if ((oact.sa_flags & SA_SIGINFO &&
- oact.sa_sigaction != signal_handler) ||
+ if (oact.sa_handler != signal_handler ||
(!(oact.sa_flags & SA_SIGINFO) &&
oact.sa_handler != SIG_DFL &&
oact.sa_handler != SIG_HOLD &&
oact.sa_handler != SIG_IGN )
)
{
- que_signal(signal_number,
- (oact.sa_flags & SA_SIGINFO) ?
- reinterpret_cast<FPTR_VOID>(oact.sa_sigaction) :
- reinterpret_cast<FPTR_VOID>(oact.sa_handler),
+#ifdef SA_SIGINFO
+ // Do not queue user handlers requesting information.
+ // There is no easy and portable way to support them.
+ // Either Firebird or application should be adjusted to use another signal
+ if (!(oact.sa_flags & SA_SIGINFO))
+#endif
+ que_signal(signal_number, reinterpret_cast<FPTR_VOID>(oact.sa_handler),
NULL, SIG_client);
}
}
@@ -553,9 +551,7 @@
}
-static void CLIB_ROUTINE signal_handler(int number,
- siginfo_t *info,
- void *pointer)
+static void CLIB_ROUTINE signal_handler(int number)
{
/**************************************
*
@@ -572,7 +568,7 @@
for (SIG sig = signals; sig; sig = sig->sig_next)
if (sig->sig_signal == number)
if (sig->sig_flags & SIG_client)
- (*sig->sig_routine.client)(number, info, pointer);
+ (*sig->sig_routine.client)(number);
else if (sig->sig_flags & SIG_informs) {
/* Routine will tell us whether to chain the signal to other handlers */
if ((*sig->sig_routine.informs)(sig->sig_arg) == SIG_informs_stop)
|