-
Notifications
You must be signed in to change notification settings - Fork 44
Description
hdrhistogram = { version = "7.5.2", default-features = false, features = ["sync"] }
I'm getting recorders within a tokio::spawn closure:
time_per_one_recorder
.get_or(|| {
let time_per_one = time_per_one.lock().expect("time_per_one lock on updater");
std::cell::RefCell::from(time_per_one.recorder())
})
.borrow_mut()
.record(duration_ms)
.expect("record to histogram");When all tasks (1 million of them, i.e. that many record() calls) were processed and there's nothing else to record, I'm doing a refresh:
let mut time_per_one = time_per_one.lock().unwrap();
println!("=> Merging histograms...");
time_per_one.refresh();
println!("=> Merging done");My program hangs forever on the refresh(), because the merging message is the last thing I'm seeing on stdout. According to top, my process doesn't do anything. I never tried debugging (as in gdb) for Rust programs so can't tell more at this point, will try it later.
By the way, everything used to be working fine whenever I called refresh() roughly once a second during the task processing. The freeze started happening when I decided one big merge when everything's done is better because it stops blocking recorders amid task processing.
Is this a crate bug, or maybe I'm using the crate wrong?
Thanks.