"Fossies" - the Fresh Open Source Software Archive

Member "gcal-4.1/lib/fatal-signal.h" (22 Jan 2017, 3331 Bytes) of package /linux/misc/gcal-4.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "fatal-signal.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 4_vs_4.1.

    1 /* Emergency actions in case of a fatal signal.
    2    Copyright (C) 2003-2004, 2009-2017 Free Software Foundation, Inc.
    3    Written by Bruno Haible <bruno@clisp.org>, 2003.
    4 
    5    This program is free software: you can redistribute it and/or modify
    6    it under the terms of the GNU General Public License as published by
    7    the Free Software Foundation; either version 3 of the License, or
    8    (at your option) any later version.
    9 
   10    This program is distributed in the hope that it will be useful,
   11    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13    GNU General Public License for more details.
   14 
   15    You should have received a copy of the GNU General Public License
   16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
   17 
   18 
   19 #ifdef __cplusplus
   20 extern "C" {
   21 #endif
   22 
   23 
   24 /* It is often useful to do some cleanup action when a usually fatal signal
   25    terminates the process, like removing a temporary file or killing a
   26    subprocess that may be stuck waiting for a device, pipe or network input.
   27    Such signals are SIGHUP, SIGINT, SIGPIPE, SIGTERM, and possibly others.
   28    The limitation of this facility is that it cannot work for SIGKILL.
   29 
   30    Signals with a SIG_IGN handler are considered to be non-fatal.  The
   31    functions in this file assume that when a SIG_IGN handler is installed
   32    for a signal, it was installed before any functions in this file were
   33    called and it stays so for the whole lifetime of the process.  */
   34 
   35 /* Register a cleanup function to be executed when a catchable fatal signal
   36    occurs.
   37 
   38    Restrictions for the cleanup function:
   39      - The cleanup function can do all kinds of system calls.
   40      - It can also access application dependent memory locations and data
   41        structures provided they are in a consistent state. One way to ensure
   42        this is through block_fatal_signals()/unblock_fatal_signals(), see
   43        below.  Another - more tricky - way to ensure this is the careful use
   44        of 'volatile'.
   45    However,
   46      - malloc() and similarly complex facilities are not safe to be called
   47        because they are not guaranteed to be in a consistent state.
   48      - Also, the cleanup function must not block the catchable fatal signals
   49        and leave them blocked upon return.
   50 
   51    The cleanup function is executed asynchronously.  It is unspecified
   52    whether during its execution the catchable fatal signals are blocked
   53    or not.  */
   54 extern void at_fatal_signal (void (*function) (void));
   55 
   56 
   57 /* Sometimes it is necessary to block the usually fatal signals while the
   58    data structures being accessed by the cleanup action are being built or
   59    reorganized.  This is the case, for example, when a temporary file or
   60    directory is created through mkstemp() or mkdtemp(), because these
   61    functions create the temporary file or directory _before_ returning its
   62    name to the application.  */
   63 
   64 /* Temporarily delay the catchable fatal signals.
   65    The signals will be blocked (= delayed) until the next call to
   66    unblock_fatal_signals().  If the signals are already blocked, a further
   67    call to block_fatal_signals() has no effect.  */
   68 extern void block_fatal_signals (void);
   69 
   70 /* Stop delaying the catchable fatal signals.  */
   71 extern void unblock_fatal_signals (void);
   72 
   73 
   74 #ifdef __cplusplus
   75 }
   76 #endif