CernVM-FS  2.12.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
monitor.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_MONITOR_H_
6 #define CVMFS_MONITOR_H_
7 
8 #include <pthread.h>
9 #include <signal.h>
10 #include <sys/types.h>
11 #include <unistd.h>
12 
13 #include <map>
14 #include <string>
15 
16 #include "util/pipe.h"
17 #include "util/platform.h"
18 #include "util/pointer.h"
19 #include "util/single_copy.h"
20 
34  public:
38  typedef void (*FnOnCrash)(void);
39 
40  static Watchdog *Create(FnOnCrash on_crash);
41  static pid_t GetPid();
42  ~Watchdog();
43  void Spawn(const std::string &crash_dump_path);
44 
48  static int g_suppressed_signals[13];
52  static int g_crash_signals[8];
53 
54  private:
55  typedef std::map<int, struct sigaction> SigactionMap;
56 
57  struct CrashData {
58  int signal;
59  int sys_errno;
60  pid_t pid;
61  };
62 
63  struct ControlFlow {
64  enum Flags {
69  };
70  };
71 
76  static const unsigned kSignalHandlerStacksize = 2 * 1024 * 1024; // 2 MB
81  static const unsigned kMaxBacktrace = 64;
82 
84  static Watchdog *Me() { return instance_; }
85 
86  static void *MainWatchdogListener(void *data);
87 
88  static void ReportSignalAndTerminate(int sig, siginfo_t *siginfo,
89  void *context);
90  static void SendTrace(int sig, siginfo_t *siginfo, void *context);
91 
92  explicit Watchdog(FnOnCrash on_crash);
93  void Fork();
94  bool WaitForSupervisee();
95  SigactionMap SetSignalHandlers(const SigactionMap &signal_handlers);
96  void Supervise();
97  void LogEmergency(std::string msg);
98  std::string ReportStacktrace();
99  std::string GenerateStackTrace(pid_t pid);
100  std::string ReadUntilGdbPrompt(int fd_pipe);
101 
102  bool spawned_;
103  std::string crash_dump_path_;
104  std::string exe_path_;
111  pthread_t thread_listener_;
116 };
117 
118 #endif // CVMFS_MONITOR_H_
void(* FnOnCrash)(void)
Definition: monitor.h:38
void Supervise()
Definition: monitor.cc:598
std::map< int, struct sigaction > SigactionMap
Definition: monitor.h:55
std::string GenerateStackTrace(pid_t pid)
Definition: monitor.cc:82
std::string ReportStacktrace()
Definition: monitor.cc:251
UniquePtr< Pipe< kPipeThreadTerminator > > pipe_terminate_
Send the terminate signal to the listener.
Definition: monitor.h:110
static void ReportSignalAndTerminate(int sig, siginfo_t *siginfo, void *context)
Definition: monitor.cc:289
SigactionMap old_signal_handlers_
Definition: monitor.h:115
static void SendTrace(int sig, siginfo_t *siginfo, void *context)
Definition: monitor.cc:299
static Watchdog * Me()
Definition: monitor.h:84
void LogEmergency(std::string msg)
Definition: monitor.cc:183
std::string exe_path_
Definition: monitor.h:104
static Watchdog * instance_
Definition: monitor.h:83
static int g_crash_signals[8]
Definition: monitor.h:52
FnOnCrash on_crash_
Definition: monitor.h:112
stack_t sighandler_stack_
Definition: monitor.h:114
static pid_t GetPid()
Definition: monitor.cc:172
static Watchdog * Create(FnOnCrash on_crash)
Definition: monitor.cc:70
pthread_t thread_listener_
Definition: monitor.h:111
Watchdog(FnOnCrash on_crash)
Definition: monitor.cc:623
pthread_spinlock_t platform_spinlock
std::string ReadUntilGdbPrompt(int fd_pipe)
Definition: monitor.cc:212
static void * MainWatchdogListener(void *data)
Definition: monitor.cc:556
bool WaitForSupervisee()
Definition: monitor.cc:454
void Fork()
Definition: monitor.cc:387
SigactionMap SetSignalHandlers(const SigactionMap &signal_handlers)
Definition: monitor.cc:366
static int g_suppressed_signals[13]
Definition: monitor.h:48
UniquePtr< Pipe< kPipeWatchdogSupervisor > > pipe_listener_
The supervisee makes sure its watchdog does not die.
Definition: monitor.h:108
UniquePtr< Pipe< kPipeWatchdog > > pipe_watchdog_
Definition: monitor.h:106
bool spawned_
Definition: monitor.h:102
static const unsigned kSignalHandlerStacksize
Definition: monitor.h:76
~Watchdog()
Definition: monitor.cc:635
void Spawn(const std::string &crash_dump_path)
Definition: monitor.cc:510
pid_t watchdog_pid_
Definition: monitor.h:105
platform_spinlock lock_handler_
Definition: monitor.h:113
std::string crash_dump_path_
Definition: monitor.h:103
static const unsigned kMaxBacktrace
Definition: monitor.h:81