Stop relying on linking details of std’s default allocator

We’ve been bitten before by symbol names changing:
https://github.com/servo/heapsize/pull/46
and upstream is planning to stop using jemalloc by default:
https://github.com/rust-lang/rust/issues/33082#issuecomment-309781465

So use the (relatively) new `#[global_allocator]` attribute
to explicitly select the system allocator on Windows
and jemalloc (now in an external crate) on other platforms.
This choice matches current defaults.
This commit is contained in:
Simon Sapin 2017-10-18 13:38:07 +02:00
parent 4c538b642e
commit 959ce482dd
20 changed files with 158 additions and 62 deletions

View file

@ -10,7 +10,7 @@ name = "profile"
path = "lib.rs"
[features]
unstable = []
unstable = ["jemalloc-sys"]
[dependencies]
profile_traits = {path = "../profile_traits"}
@ -31,3 +31,4 @@ regex = "0.2"
[target.'cfg(not(target_os = "windows"))'.dependencies]
libc = "0.2"
jemalloc-sys = {version = "0.1.3", optional = true}

View file

@ -2,17 +2,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#![cfg_attr(all(feature = "unstable", not(target_os = "windows")), feature(alloc_jemalloc))]
#![deny(unsafe_code)]
#[allow(unused_extern_crates)]
#[cfg(all(feature = "unstable", not(target_os = "windows")))]
extern crate alloc_jemalloc;
extern crate heartbeats_simple;
extern crate influent;
extern crate ipc_channel;
#[allow(unused_extern_crates)]
#[cfg(all(feature = "unstable", not(target_os = "windows")))]
extern crate jemalloc_sys;
#[cfg(not(target_os = "windows"))]
extern crate libc;
#[macro_use]

View file

@ -354,7 +354,7 @@ impl ReportsForest {
mod system_reporter {
#[cfg(all(feature = "unstable", not(target_os = "windows")))]
use libc::{c_char, c_void, size_t};
use libc::{c_void, size_t};
#[cfg(target_os = "linux")]
use libc::c_int;
use profile_traits::mem::{Report, ReportKind, ReporterRequest};
@ -460,11 +460,7 @@ mod system_reporter {
}
#[cfg(all(feature = "unstable", not(target_os = "windows")))]
extern {
#[cfg_attr(any(target_os = "macos", target_os = "android"), link_name = "je_mallctl")]
fn mallctl(name: *const c_char, oldp: *mut c_void, oldlenp: *mut size_t,
newp: *mut c_void, newlen: size_t) -> ::libc::c_int;
}
use jemalloc_sys::mallctl;
#[cfg(all(feature = "unstable", not(target_os = "windows")))]
fn jemalloc_stat(value_name: &str) -> Option<usize> {