]> git.proxmox.com Git - pve-lxc-syscalld.git/blobdiff - src/process/pid_fd.rs
support pure cgroupv2 environments
[pve-lxc-syscalld.git] / src / process / pid_fd.rs
index 8306ee9f1ed23e66d465c2f2916c36abde941aab..1caf8f262bd8c381c274db90771a7ba0b98e8734 100644 (file)
@@ -6,7 +6,7 @@ use std::os::raw::c_int;
 use std::os::unix::ffi::OsStringExt;
 use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
 
-use failure::{bail, Error};
+use anyhow::{bail, Error};
 use libc::pid_t;
 
 use crate::capability::Capabilities;
@@ -20,14 +20,7 @@ file_descriptor_impl!(PidFd);
 
 impl PidFd {
     pub fn current() -> io::Result<Self> {
-        let fd = c_try!(unsafe {
-            libc::open(
-                b"/proc/self\0".as_ptr() as _,
-                libc::O_DIRECTORY | libc::O_CLOEXEC,
-            )
-        });
-
-        Ok(Self(fd, unsafe { libc::getpid() }))
+        Self::open(unsafe { libc::getpid() })
     }
 
     pub fn open(pid: pid_t) -> io::Result<Self> {
@@ -229,7 +222,10 @@ impl PidFd {
                 cgroups.v2 = Some(path);
             } else {
                 for entry in name.split(',') {
-                    cgroups.v1.insert(entry.to_string(), path.clone());
+                    cgroups
+                        .v1
+                        .get_or_insert_with(Default::default)
+                        .insert(entry.to_string(), path.clone());
                 }
             }
         }