]> git.proxmox.com Git - ceph.git/blob - ceph/src/include/coredumpctl.h
update sources to v12.1.1
[ceph.git] / ceph / src / include / coredumpctl.h
1 #ifdef HAVE_SYS_PRCTL_H
2 #include <iostream>
3 #include <sys/prctl.h>
4 #include "common/errno.h"
5
6 struct PrCtl {
7 int saved_state = -1;
8 int set_dumpable(int new_state) {
9 int r = prctl(PR_SET_DUMPABLE, new_state);
10 if (r) {
11 r = -errno;
12 std::cerr << "warning: unable to " << (new_state ? "set" : "unset")
13 << " dumpable flag: " << cpp_strerror(r)
14 << std::endl;
15 }
16 return r;
17 }
18 PrCtl(int new_state = 0) {
19 int r = prctl(PR_GET_DUMPABLE);
20 if (r == -1) {
21 r = errno;
22 std::cerr << "warning: unable to get dumpable flag: " << cpp_strerror(r)
23 << std::endl;
24 } else if (r != new_state) {
25 if (!set_dumpable(new_state)) {
26 saved_state = r;
27 }
28 }
29 }
30 ~PrCtl() {
31 if (saved_state < 0) {
32 return;
33 }
34 set_dumpable(saved_state);
35 }
36 };
37 #else
38 struct PrCtl {};
39 #endif