ATLAS Offline Software
Loading...
Searching...
No Matches
SealSignal.cxx File Reference
#include "CxxUtils/SealCommon.h"
#include "CxxUtils/SealSignal.h"
#include "CxxUtils/SealDebug.h"
#include "CxxUtils/SealSharedLib.h"
#include <cassert>
#include <cstring>
#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <unistd.h>

Go to the source code of this file.

Namespaces

namespace  Athena
 Some weak symbol referencing magic... These are declared in AthenaKernel/getMessageSvc.h and will be non-nullptr in case the GaudiSvc/AthenaKernel shared libraries have been loaded.

Typedefs

typedef void(* Athena::DummyHandlerType) (int)
 Dummy handler type for standard signal() function.

Functions

static pid_t ProcessInfo__pid (void)
 Get the process id.
static pid_t ProcessInfo__ppid (void)
 Get the parent process id.
static void Athena::SignalDumpLibs (const SharedLibrary::LibraryInfo &info, IOFD fd)
 Internal #Signal::fataldump() dumper to produce the list of currently loaded shared libraries.
void Signal::handleQuit Athena::ATLAS_NOT_THREAD_SAFE (QuitHook hook)
void Signal::handleFatal Athena::ATLAS_NOT_THREAD_SAFE (const char *applicationName, IOFD fd, FatalHook hook, FatalReturn mainreturn, unsigned options)
 Install default handler for fatal signals.
void Signal::quit Athena::ATLAS_NOT_THREAD_SAFE (int sig, siginfo_t *info, void *x)
 The quit signal handler.
bool Signal::fatalDump Athena::ATLAS_NOT_THREAD_SAFE (int sig, siginfo_t *info, void *extra, IOFD fd, unsigned options)
StatusCode ROOTMessageFilterSvc::initialize Athena::ATLAS_NOT_THREAD_SAFE (void)
 Return the file descriptor #fataldump() uses for output.
void CxxUtils_installFatalHandler ATLAS_NOT_THREAD_SAFE ()
 Install fatal handler with default options.

Variables

static const int SIGNAL_MESSAGE_BUFSIZE = 2048
 Maximum length of a signal message.
static SharedLibrary::InfoHandlerAthena::SignalDumpCallback = 0
 Shared library dump callback for #Signal::fataldump().
static char Athena::buf [SIGNAL_MESSAGE_BUFSIZE]
 Dump application state information on a fatal signal.

Function Documentation

◆ ATLAS_NOT_THREAD_SAFE()

void CxxUtils_installFatalHandler ATLAS_NOT_THREAD_SAFE ( void )

Install fatal handler with default options.

This is meant to be easy to call from python via ctypes.

Definition at line 1639 of file SealSignal.cxx.

1640 {
1641 Athena::Signal::handleFatal(nullptr, 1);
1642 }

◆ ProcessInfo__pid()

pid_t ProcessInfo__pid ( void )
static

Get the process id.

Definition at line 74 of file SealSignal.cxx.

75{
76#ifdef _WIN32
77 return GetCurrentProcessId ();
78#else
79 return ::getpid ();
80#endif
81}

◆ ProcessInfo__ppid()

pid_t ProcessInfo__ppid ( void )
static

Get the parent process id.

Definition at line 85 of file SealSignal.cxx.

86{
87#ifdef _WIN32
88 PROCESS_BASIC_INFORMATION pbi;
89 if (NtQueryInformationProcess (GetCurrentProcess(),ProcessBasicInformation,
90 &pbi, sizeof (pbi), 0) == STATUS_SUCCESS)
91 return pbi.InheritedFromUniqueProcessId;
92
93 // FIXME: throw systemerror!
94 assert (false);
95 return -1;
96#else
97 return ::getppid ();
98#endif
99}

Variable Documentation

◆ SIGNAL_MESSAGE_BUFSIZE

const int SIGNAL_MESSAGE_BUFSIZE = 2048
static

Maximum length of a signal message.

Used for local format buffers for the signal number and name message in #Signal::fataldump() and the currently loaded shared library message in #SignalLibDump(). Make this long enough to fit long shared library names.

Definition at line 31 of file SealSignal.cxx.