]> git.proxmox.com Git - ceph.git/blame - ceph/src/include/coredumpctl.h
update sources to v12.1.2
[ceph.git] / ceph / src / include / coredumpctl.h
CommitLineData
c07f9fc5
FG
1#pragma once
2
7c673cae
FG
3#ifdef HAVE_SYS_PRCTL_H
4#include <iostream>
5#include <sys/prctl.h>
6#include "common/errno.h"
7
8struct 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};
c07f9fc5 39
7c673cae 40#else
c07f9fc5
FG
41
42struct PrCtl {
43 // to silence the Wunused-variable warning
44 PrCtl() {}
45};
46
7c673cae 47#endif