1
0
mirror of https://https.git.savannah.gnu.org/git/gnulib.git synced 2026-04-28 06:33:36 +00:00
Files
gnulib/lib/sigdelay.h
Bruno Haible 006d544083 sigdelay: New module.
* lib/sigdelay.h: New file.
* lib/sigdelay.c: New file.
* modules/sigdelay: New file.
2026-04-15 13:45:52 +02:00

55 lines
2.1 KiB
C

/* Delaying the delivery of signals to the current process.
Copyright (C) 2026 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible. */
#ifndef _SIGDELAY_H
#define _SIGDELAY_H
#include <signal.h>
#ifdef __cplusplus
extern "C" {
#endif
/* While pthread_sigmask() can block the delivery of a signal to a particular
thread and thus — in the case of a process with a single thread — actually
delay the signal, POSIX lacks a facility for blocking or delaying a signal
process-wide, i.e. for all threads of the process at once.
The sigdelay() function is such a facility.
It assumes that the signal handler for the affected signals does not change
between matching sigdelay (SIG_BLOCK, ...) and sigdelay (SIG_UNBLOCK, ...)
invocations. */
/* With HOW = SIG_BLOCK, this function adds the signals from SET to the set
of delayed signals.
With HOW = SIG_UNBLOCK, this function removes the signals from SET from the
set of delayed signals.
This function works cumulatively, that is, when a signal was added N times,
it also needs to be removed N times in order to restore the initial state.
If OLD_SET is non-NULL, this function also stores the previous set of
delayed signals in *OLD_SET.
Returns 0 if successful, or -1 with errno set in case of failure. */
extern int sigdelay (int how, const sigset_t *restrict set,
sigset_t *restrict old_set);
#ifdef __cplusplus
}
#endif
#endif /* _SIGDELAY_H */