From 61411cfe169c426aed5104967ab2a60244ca0171 Mon Sep 17 00:00:00 2001 From: Simonas Kazlauskas Date: Fri, 21 Feb 2025 14:52:48 +0200 Subject: [PATCH] stacker: 0.1.19 --- Cargo.toml | 4 ++-- src/backends/openbsd.rs | 3 ++- src/backends/unix.rs | 28 +++++----------------------- 3 files changed, 9 insertions(+), 26 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a613202..ad492fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stacker" -version = "0.1.18" +version = "0.1.19" edition = "2021" rust-version = "1.63" authors = ["Alex Crichton ", "Simonas Kazlauskas "] @@ -9,7 +9,7 @@ license = "MIT OR Apache-2.0" readme = "README.md" repository = "https://github.com/rust-lang/stacker" homepage = "https://github.com/rust-lang/stacker" -documentation = "https://docs.rs/stacker/0.1.15" +documentation = "https://docs.rs/stacker/0.1.19" description = """ A stack growth library useful when implementing deeply recursive algorithms that may accidentally blow the stack. diff --git a/src/backends/openbsd.rs b/src/backends/openbsd.rs index 3a6dd71..ee582d8 100644 --- a/src/backends/openbsd.rs +++ b/src/backends/openbsd.rs @@ -4,5 +4,6 @@ pub unsafe fn guess_os_stack_limit() -> Option { if res != 0 { return None; } - Some(stackinfo.assume_init().ss_sp as usize - stackinfo.assume_init().ss_size) + let stackinfo = stackinfo.assume_init(); + Some(stackinfo.ss_sp as usize - stackinfo.ss_size) } diff --git a/src/backends/unix.rs b/src/backends/unix.rs index 21ce3b1..97ef209 100644 --- a/src/backends/unix.rs +++ b/src/backends/unix.rs @@ -5,26 +5,19 @@ use libc::pthread_getattr_np as get_attr; pub unsafe fn guess_os_stack_limit() -> Option { let mut attr = PthreadAttr::new()?; - - handle_pthread_err(get_attr(libc::pthread_self(), attr.as_mut_ptr()))?; - + (get_attr(libc::pthread_self(), &mut attr.0) == 0).then_some(())?; let mut stackaddr = std::ptr::null_mut(); let mut stacksize = 0; - handle_pthread_err(libc::pthread_attr_getstack( - attr.as_mut_ptr(), - &mut stackaddr, - &mut stacksize, - ))?; - + (libc::pthread_attr_getstack(&attr.0, &mut stackaddr, &mut stacksize) == 0).then_some(())?; Some(stackaddr as usize) } -struct PthreadAttr(std::mem::MaybeUninit); +struct PthreadAttr(libc::pthread_attr_t); impl Drop for PthreadAttr { fn drop(&mut self) { unsafe { - let ret = libc::pthread_attr_destroy(self.0.as_mut_ptr()); + let ret = libc::pthread_attr_destroy(&mut self.0); if ret != 0 { let err = std::io::Error::last_os_error(); panic!( @@ -36,23 +29,12 @@ impl Drop for PthreadAttr { } } -fn handle_pthread_err(ret: libc::c_int) -> Option<()> { - if ret != 0 { - return None; - } - Some(()) -} - impl PthreadAttr { unsafe fn new() -> Option { let mut attr = std::mem::MaybeUninit::::uninit(); if libc::pthread_attr_init(attr.as_mut_ptr()) != 0 { return None; } - Some(PthreadAttr(attr)) - } - - fn as_mut_ptr(&mut self) -> *mut libc::pthread_attr_t { - self.0.as_mut_ptr() + Some(PthreadAttr(attr.assume_init())) } }