cosmic-comp/src/utils/rlimit.rs

31 lines
1,017 B
Rust
Raw Normal View History

2024-04-03 18:08:43 +02:00
use rustix::process::{getrlimit, setrlimit, Resource, Rlimit};
use std::sync::atomic::{AtomicU64, Ordering};
static OLD_LIMIT: AtomicU64 = AtomicU64::new(0);
static MAX_LIMIT: AtomicU64 = AtomicU64::new(0);
pub fn increase_nofile_limit() {
let mut limits = getrlimit(Resource::Nofile);
OLD_LIMIT.store(limits.current.unwrap_or(0), Ordering::SeqCst);
MAX_LIMIT.store(limits.maximum.unwrap_or(0), Ordering::SeqCst);
limits.current = limits.maximum;
if let Err(err) = setrlimit(Resource::Nofile, limits) {
tracing::warn!("Failed to raise nofile soft limit: {:?}", err);
}
}
pub fn restore_nofile_limit() {
let current = OLD_LIMIT.load(Ordering::SeqCst);
let maximum = MAX_LIMIT.load(Ordering::SeqCst);
let limits = Rlimit {
current: (current > 0).then_some(current),
maximum: (maximum > 0).then_some(maximum),
};
if let Err(err) = setrlimit(Resource::Nofile, limits) {
eprintln!("Failed to restore nofile soft limit: {:?}", err);
}
}