Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / dmclock / test / dmcPrCtl.h
1 // essentially the same as ceph's PrCtl.h, copied into the dmclock library
2
3 #include <dmtest-config.h>
4 #ifdef HAVE_SYS_PRCTL_H
5 #include <iostream>
6 #include <sys/prctl.h>
7 #include <errno.h>
8
9 struct PrCtl {
10   int saved_state = -1;
11   int set_dumpable(int new_state) {
12     int r = prctl(PR_SET_DUMPABLE, new_state);
13     if (r) {
14       r = -errno;
15       std::cerr << "warning: unable to " << (new_state ? "set" : "unset")
16                 << " dumpable flag: " << strerror(r)
17                 << std::endl;
18     }
19     return r;
20   }
21   PrCtl(int new_state = 0) {
22     int r = prctl(PR_GET_DUMPABLE);
23     if (r == -1) {
24       r = errno;
25       std::cerr << "warning: unable to get dumpable flag: " << strerror(r)
26                 << std::endl;
27     } else if (r != new_state) {
28       if (!set_dumpable(new_state)) {
29         saved_state = r;
30       }
31     }
32   }
33   ~PrCtl() {
34     if (saved_state < 0) {
35       return;
36     }
37     set_dumpable(saved_state);
38   }
39 };
40 #else
41 struct PrCtl {};
42 #endif