Applied PIMPL to sig{Fpe,Int,Quit,Segv} and {cpu,clock}Time classes
[freefoam.git] / src / OSspecific / Unix / signals / sigFpeImpl.H
blobb66524cc5f9d4b0e9b788ca193501ba59a514263
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2008 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Class
26     Foam::sigFpeImpl
28 Description
29     Set up trapping for floating point exceptions (signal FPE).
31     Controlled by two env vars:
32     @param FOAM_SIGFPE \n
33         exception trapping
34     @param FOAM_SETNAN \n
35         initialization of all malloced memory to NaN. If FOAM_SIGFPE
36         also set, this will cause usage of uninitialized scalars to trigger
37         an abort.
39     This is the platform specific opaque implementation for class sigFpe.
41 SourceFiles
42     sigFpeImpl.C
44 \*---------------------------------------------------------------------------*/
46 #ifndef sigFpeImpl_H
47 #define sigFpeImpl_H
49 #include "OSspecific.H"
50 #include <signal.h>
52 #if defined(linux) || defined(linuxAMD64) || defined(linuxIA64)
53 #    define LINUX
54 #endif
56 #if defined(LINUX) && defined(__GNUC__)
57 #    define LINUX_GNUC
58 #endif
60 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
62 namespace Foam
65 /*---------------------------------------------------------------------------*\
66                            Class sigFpeImpl Declaration
67 \*---------------------------------------------------------------------------*/
69 class sigFpeImpl
71     // Private data
73         //- Saved old signal trapping setting
74         static struct sigaction oldAction_;
76 #       ifdef LINUX
78             //- Saved old malloc
79             static void *(*old_malloc_hook)(size_t, const void *);
81             //- nan malloc function. From malloc_hook manpage.
82             static void* my_malloc_hook(size_t size, const void *caller);
84 #       endif
87     // Static data members
89 #   ifdef LINUX_GNUC
91         //- Handler for caught signals
92         static void sigFpeHandler(int);
94 #   endif
97 public:
100     // Constructors
102         sigFpeImpl();
105     // Destructor
107         ~sigFpeImpl();
110     // Member functions
112         void set();
116 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
118 } // End namespace Foam
120 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
122 #endif
124 // ************************************************************************* //