Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * legacy-pqsignal.c
4 : : * reliable BSD-style signal(2) routine stolen from RWW who stole it
5 : : * from Stevens...
6 : : *
7 : : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
8 : : * Portions Copyright (c) 1994, Regents of the University of California
9 : : *
10 : : *
11 : : * IDENTIFICATION
12 : : * src/interfaces/libpq/legacy-pqsignal.c
13 : : *
14 : : *-------------------------------------------------------------------------
15 : : */
16 : : #include "postgres_fe.h"
17 : :
18 : : #include <signal.h>
19 : :
20 : :
21 : : /*
22 : : * This version of pqsignal() exists only because pre-9.3 releases
23 : : * of libpq exported pqsignal(), and some old client programs still
24 : : * depend on that. (Since 9.3, clients are supposed to get it from
25 : : * libpgport instead.)
26 : : *
27 : : * Because it is only intended for backwards compatibility, we freeze it
28 : : * with the semantics it had in 9.2; in particular, this has different
29 : : * behavior for SIGALRM than the version in src/port/pqsignal.c.
30 : : *
31 : : * libpq itself does not use this.
32 : : */
33 : : pqsigfunc
1648 tgl@sss.pgh.pa.us 34 :UBC 0 : pqsignal(int signo, pqsigfunc func)
35 : : {
36 : : #ifndef WIN32
37 : : struct sigaction act,
38 : : oact;
39 : :
40 : 0 : act.sa_handler = func;
41 : 0 : sigemptyset(&act.sa_mask);
42 : 0 : act.sa_flags = 0;
43 [ # # ]: 0 : if (signo != SIGALRM)
44 : 0 : act.sa_flags |= SA_RESTART;
45 : : #ifdef SA_NOCLDSTOP
46 [ # # ]: 0 : if (signo == SIGCHLD)
47 : 0 : act.sa_flags |= SA_NOCLDSTOP;
48 : : #endif
49 [ # # ]: 0 : if (sigaction(signo, &act, &oact) < 0)
50 : 0 : return SIG_ERR;
51 : 0 : return oact.sa_handler;
52 : : #else /* WIN32 */
53 : : return signal(signo, func);
54 : : #endif
55 : : }
|