]> git.proxmox.com Git - ceph.git/blob - ceph/src/dmclock/test/dmcPrCtl.h
update sources to v12.1.3
[ceph.git] / 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