LCOV - code coverage report
Current view: top level - src/interfaces/libpq - legacy-pqsignal.c (source / functions) Hit Total Coverage
Test: PostgreSQL 18devel Lines: 0 11 0.0 %
Date: 2025-01-18 04:15:08 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          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-2025, 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, nor does anything else in our code.
      32             :  *
      33             :  * src/include/port.h #define's pqsignal as pqsignal_fe or pqsignal_be,
      34             :  * but here we want to export just plain "pqsignal".  We can't rely on
      35             :  * port.h's extern declaration either.  (The point of those #define's
      36             :  * is to ensure that no in-tree code accidentally calls this version.)
      37             :  */
      38             : #undef pqsignal
      39             : extern pqsigfunc pqsignal(int signo, pqsigfunc func);
      40             : 
      41             : pqsigfunc
      42           0 : pqsignal(int signo, pqsigfunc func)
      43             : {
      44             : #ifndef WIN32
      45             :     struct sigaction act,
      46             :                 oact;
      47             : 
      48           0 :     act.sa_handler = func;
      49           0 :     sigemptyset(&act.sa_mask);
      50           0 :     act.sa_flags = 0;
      51           0 :     if (signo != SIGALRM)
      52           0 :         act.sa_flags |= SA_RESTART;
      53             : #ifdef SA_NOCLDSTOP
      54           0 :     if (signo == SIGCHLD)
      55           0 :         act.sa_flags |= SA_NOCLDSTOP;
      56             : #endif
      57           0 :     if (sigaction(signo, &act, &oact) < 0)
      58           0 :         return SIG_ERR;
      59           0 :     return oact.sa_handler;
      60             : #else                           /* WIN32 */
      61             :     return signal(signo, func);
      62             : #endif
      63             : }

Generated by: LCOV version 1.14