diff --git a/Cargo.lock b/Cargo.lock index 486c7d6f..1e2c0271 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -700,9 +700,9 @@ dependencies = [ [[package]] name = "uapi" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2a608d845b3ddcf7769250f94124d29e346c0f8fdb935756c6b758ac5d9b59" +checksum = "7e1cab2fc800ded6ae4bc579e8c563a7dba3e1691510c1a82375409e44aa5b58" dependencies = [ "cc", "cfg-if 0.1.10", diff --git a/Cargo.toml b/Cargo.toml index 447fe264..769749c7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ panic = "abort" panic = "abort" [dependencies] -uapi = "0.2.7" +uapi = "0.2.9" thiserror = "1.0.30" ahash = "0.7.6" log = { version = "0.4.16", features = ["std"] } diff --git a/src/compositor.rs b/src/compositor.rs index d69fb4ed..b52e21fc 100644 --- a/src/compositor.rs +++ b/src/compositor.rs @@ -1,3 +1,4 @@ +use uapi::c; use { crate::{ acceptor::{Acceptor, AcceptorError}, @@ -35,6 +36,8 @@ use { std::{cell::Cell, ops::Deref, rc::Rc, sync::Arc}, thiserror::Error, }; +use crate::utils::oserror::OsError; +use crate::utils::tri::Try; pub const MAX_EXTENTS: i32 = (1 << 24) - 1; @@ -51,6 +54,7 @@ pub fn start_compositor(global: GlobalArgs, args: RunArgs) { eprintln!("See {} for more details.", logger.path()); std::process::exit(1); } + log::info!("Exit"); } #[derive(Debug, Error)] @@ -72,6 +76,7 @@ enum MainError { } fn main_(forker: Rc, logger: Arc, _args: &RunArgs) -> Result<(), MainError> { + init_fd_limit(); leaks::init(); render::init()?; clientmem::init()?; @@ -195,3 +200,18 @@ fn main_(forker: Rc, logger: Arc, _args: &RunArgs) -> Resul leaks::log_leaked(); Ok(()) } + +fn init_fd_limit() { + let res = OsError::tri(|| { + let mut cur = uapi::getrlimit(c::RLIMIT_NOFILE as _)?; + if cur.rlim_cur < cur.rlim_max { + log::info!("Increasing file descriptor limit from {} to {}", cur.rlim_cur, cur.rlim_max); + cur.rlim_cur = cur.rlim_max; + uapi::setrlimit(c::RLIMIT_NOFILE as _, &cur)?; + } + Ok(()) + }); + if let Err(e) = res { + log::warn!("Could not increase file descriptor limit: {}", ErrorFmt(e)); + } +}