cosmic-comp/src/utils/rlimit.rs
2024-04-05 13:49:36 +02:00

30 lines
1,017 B
Rust

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);
}
}