Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / include / coredumpctl.h
1 #pragma once
2
3 #ifdef HAVE_SYS_PRCTL_H
4 #include <iostream>
5 #include <sys/prctl.h>
6 #include "common/errno.h"
7
8 struct PrCtl {
9   int saved_state = -1;
10   int set_dumpable(int new_state) {
11     int r = prctl(PR_SET_DUMPABLE, new_state);
12     if (r) {
13       r = -errno;
14       std::cerr << "warning: unable to " << (new_state ? "set" : "unset")
15                 << " dumpable flag: " << cpp_strerror(r)
16                 << std::endl;
17     }
18     return r;
19   }
20   PrCtl(int new_state = 0) {
21     int r = prctl(PR_GET_DUMPABLE);
22     if (r == -1) {
23       r = errno;
24       std::cerr << "warning: unable to get dumpable flag: " << cpp_strerror(r)
25                 << std::endl;
26     } else if (r != new_state) {
27       if (!set_dumpable(new_state)) {
28         saved_state = r;
29       }
30     }
31   }
32   ~PrCtl() {
33     if (saved_state < 0) {
34       return;
35     }
36     set_dumpable(saved_state);
37   }
38 };
39
40 #else
41
42 struct PrCtl {
43   // to silence the Wunused-variable warning
44   PrCtl() {}
45 };
46
47 #endif