File: malloc_conf_set.rs

package info (click to toggle)
rust-tikv-jemalloc-sys 0.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 208 kB
  • sloc: ansic: 6; makefile: 4
file content (41 lines) | stat: -rw-r--r-- 1,175 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
union U {
    x: &'static u8,
    y: &'static libc::c_char,
}

#[allow(non_upper_case_globals)]
#[cfg_attr(prefixed, export_name = "_rjem_malloc_conf")]
#[cfg_attr(not(prefixed), no_mangle)]
pub static malloc_conf: Option<&'static libc::c_char> = Some(unsafe {
    U {
        x: &b"stats_print_opts:mdal\0"[0],
    }
    .y
});

#[test]
fn malloc_conf_set() {
    unsafe {
        assert_eq!(tikv_jemalloc_sys::malloc_conf, malloc_conf);

        let mut ptr: *const libc::c_char = std::ptr::null();
        let mut ptr_len: libc::size_t = std::mem::size_of::<*const libc::c_char>() as libc::size_t;
        let r = tikv_jemalloc_sys::mallctl(
            &b"opt.stats_print_opts\0"[0] as *const _ as *const libc::c_char,
            &mut ptr as *mut *const _ as *mut libc::c_void,
            &mut ptr_len as *mut _,
            std::ptr::null_mut(),
            0,
        );
        assert_eq!(r, 0);
        assert!(!ptr.is_null());

        let s = std::ffi::CStr::from_ptr(ptr).to_string_lossy().into_owned();
        assert!(
            s.contains("mdal"),
            "opt.stats_print_opts: \"{}\" (len = {})",
            s,
            s.len()
        );
    }
}