aboutsummaryrefslogtreecommitdiffstats
path: root/components/util/memory.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/util/memory.rs')
-rw-r--r--components/util/memory.rs24
1 files changed, 14 insertions, 10 deletions
diff --git a/components/util/memory.rs b/components/util/memory.rs
index 278a5a448fb..5e3033e2aa5 100644
--- a/components/util/memory.rs
+++ b/components/util/memory.rs
@@ -6,13 +6,16 @@
use libc::{c_char,c_int,c_void,size_t};
use std::borrow::ToOwned;
+use std::ffi::CString;
use std::io::timer::sleep;
#[cfg(target_os="linux")]
use std::io::File;
+use std::mem;
use std::mem::size_of;
#[cfg(target_os="linux")]
use std::os::page_size;
use std::ptr::null_mut;
+use std::sync::mpsc::{Sender, channel, Receiver};
use std::time::duration::Duration;
use task::spawn_named;
#[cfg(target_os="macos")]
@@ -45,16 +48,16 @@ impl MemoryProfiler {
Some(period) => {
let period = Duration::milliseconds((period * 1000f64) as i64);
let chan = chan.clone();
- spawn_named("Memory profiler timer".to_owned(), proc() {
+ spawn_named("Memory profiler timer".to_owned(), move || {
loop {
sleep(period);
- if chan.send_opt(MemoryProfilerMsg::Print).is_err() {
+ if chan.send(MemoryProfilerMsg::Print).is_err() {
break;
}
}
});
// Spawn the memory profiler.
- spawn_named("Memory profiler".to_owned(), proc() {
+ spawn_named("Memory profiler".to_owned(), move || {
let memory_profiler = MemoryProfiler::new(port);
memory_profiler.start();
});
@@ -62,9 +65,9 @@ impl MemoryProfiler {
None => {
// No-op to handle messages when the memory profiler is
// inactive.
- spawn_named("Memory profiler".to_owned(), proc() {
+ spawn_named("Memory profiler".to_owned(), move || {
loop {
- match port.recv_opt() {
+ match port.recv() {
Err(_) | Ok(MemoryProfilerMsg::Exit) => break,
_ => {}
}
@@ -84,7 +87,7 @@ impl MemoryProfiler {
pub fn start(&self) {
loop {
- match self.port.recv_opt() {
+ match self.port.recv() {
Ok(msg) => {
if !self.handle_msg(msg) {
break
@@ -151,12 +154,13 @@ extern {
fn get_jemalloc_stat(name: &'static str) -> Option<u64> {
let mut old: size_t = 0;
- let c_name = name.to_c_str();
+ let c_name = CString::from_slice(name.as_bytes());
let oldp = &mut old as *mut _ as *mut c_void;
let mut oldlen = size_of::<size_t>() as size_t;
let rv: c_int;
unsafe {
- rv = je_mallctl(c_name.into_inner(), oldp, &mut oldlen, null_mut(), 0);
+ rv = je_mallctl(c_name.as_ptr(), oldp, &mut oldlen, null_mut(), 0);
+ mem::forget(c_name); // XXX correct?
}
if rv == 0 { Some(old as u64) } else { None }
}
@@ -164,7 +168,7 @@ fn get_jemalloc_stat(name: &'static str) -> Option<u64> {
// Like std::macros::try!, but for Option<>.
macro_rules! option_try(
($e:expr) => (match $e { Some(e) => e, None => return None })
-)
+);
#[cfg(target_os="linux")]
fn get_proc_self_statm_field(field: uint) -> Option<u64> {
@@ -172,7 +176,7 @@ fn get_proc_self_statm_field(field: uint) -> Option<u64> {
match f.read_to_string() {
Ok(contents) => {
let s = option_try!(contents.as_slice().words().nth(field));
- let npages: u64 = option_try!(from_str(s));
+ let npages: u64 = option_try!(s.parse());
Some(npages * (page_size() as u64))
}
Err(_) => None