improve debug memory-stats options

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2025-01-18 01:32:37 +00:00
parent 8141ca3444
commit f9e76d6239
5 changed files with 35 additions and 23 deletions

View file

@ -5,7 +5,7 @@ pub fn trim() -> crate::Result { Ok(()) }
/// Always returns None
#[must_use]
pub fn memory_stats() -> Option<String> { None }
pub fn memory_stats(_opts: &str) -> Option<String> { None }
/// Always returns None
#[must_use]

View file

@ -7,9 +7,9 @@ pub fn trim() -> crate::Result { Ok(()) }
#[must_use]
//TODO: get usage
pub fn memory_usage() -> Option<string> { None }
pub fn memory_usage() -> Option<String> { None }
#[must_use]
pub fn memory_stats() -> Option<String> {
pub fn memory_stats(_opts: &str) -> Option<String> {
Some("Extended statistics are not available from hardened_malloc.".to_owned())
}

View file

@ -3,7 +3,7 @@
use std::{
cell::OnceCell,
ffi::{c_char, c_void},
fmt::{Debug, Write},
fmt::Debug,
};
use arrayvec::ArrayVec;
@ -66,15 +66,12 @@ pub fn memory_usage() -> Option<String> {
#[cfg(not(feature = "jemalloc_stats"))]
pub fn memory_usage() -> Option<String> { None }
#[must_use]
pub fn memory_stats() -> Option<String> {
const MAX_LENGTH: usize = 65536 - 4096;
pub fn memory_stats(opts: &str) -> Option<String> {
const MAX_LENGTH: usize = 1_048_576;
let opts_s = "d";
let mut str = String::new();
let opaque = std::ptr::from_mut(&mut str).cast::<c_void>();
let opts_p: *const c_char = std::ffi::CString::new(opts_s)
let opts_p: *const c_char = std::ffi::CString::new(opts)
.expect("cstring")
.into_raw()
.cast_const();
@ -84,7 +81,8 @@ pub fn memory_stats() -> Option<String> {
unsafe { ffi::malloc_stats_print(Some(malloc_stats_cb), opaque, opts_p) };
str.truncate(MAX_LENGTH);
Some(format!("<pre><code>{str}</code></pre>"))
Some(str)
}
unsafe extern "C" fn malloc_stats_cb(opaque: *mut c_void, msg: *const c_char) {