1use std::{
2 alloc::System,
3 sync::mpsc,
4 time::{Duration, Instant},
5};
6
7use alloc_track::{AllocTrack, BacktraceMode};
8
9#[global_allocator]
10static GLOBAL_ALLOC: AllocTrack<System> = AllocTrack::new(System, BacktraceMode::Short);
11
12fn main() {
13 let (sender, receiver) = mpsc::channel();
14 std::thread::Builder::new()
15 .name("thread2".to_string())
16 .spawn(move || thread(receiver))
17 .unwrap();
18
19 let mut last_print = Instant::now();
20 loop {
21 let buf = vec![1u8; 1024];
22 sender.send(buf).ok();
23 std::thread::sleep(Duration::from_millis(100));
24 if last_print.elapsed() > Duration::from_secs(10) {
25 last_print = Instant::now();
26 let report = alloc_track::backtrace_report(|_, _| true);
27 println!("BACKTRACES\n{report}");
28 println!("BACKTRACES CSV\n{}", report.csv());
29 let report = alloc_track::thread_report();
30 println!("THREADS\n{report}");
31 }
32 }
33}
34
35fn thread(receiver: mpsc::Receiver<Vec<u8>>) {
36 let mut flip = false;
37 while let Ok(block) = receiver.recv() {
38 if flip {
39 drop(block);
40 } else {
41 std::mem::forget(block);
42 }
43 flip = !flip;
44 }
45}