jemallocator 0.3.0

A Rust allocator backed by jemalloc
//! Test enabling / disabling background threads at run-time if the
//! library was compiled with background thread run-time support.
#![cfg(feature = "background_threads_runtime_support")]
#![cfg(not(feature = "unprefixed_malloc_on_supported_platforms"))]
#![cfg(not(target_env = "musl"))]

extern crate jemalloc_ctl;
extern crate jemallocator;
extern crate libc;

use jemallocator::Jemalloc;

#[global_allocator]
static A: Jemalloc = Jemalloc;

union U {
    x: &'static u8,
    y: &'static libc::c_char,
}

// Even if background threads are not enabled at run-time by default
// at configuration time, this enables them.
#[allow(non_upper_case_globals)]
#[export_name = "_rjem_malloc_conf"]
pub static malloc_conf: Option<&'static libc::c_char> = Some(unsafe {
    U {
        x: &b"background_thread:true\0"[0],
    }
    .y
});

#[test]
fn background_threads_enabled() {
    // Background threads are unconditionally enabled at run-time by default.
    assert_eq!(jemalloc_ctl::opt::background_thread::read().unwrap(), true);
}