Skip to content

Commit f33f588

Browse files
committed
chore(memtrack): save both old and new addr for realloc event
1 parent 22373e8 commit f33f588

3 files changed

Lines changed: 51 additions & 8 deletions

File tree

crates/runner-shared/benches/memtrack_writer.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ fn generate_events(n: usize) -> Vec<MemtrackEvent> {
1616
let kind = match rng.gen_range(0..8) {
1717
0 => MemtrackEventKind::Malloc { size },
1818
1 => MemtrackEventKind::Free,
19-
2 => MemtrackEventKind::Realloc { size },
19+
2 => MemtrackEventKind::Realloc {
20+
old_addr: Some(rng.r#gen()),
21+
size,
22+
},
2023
3 => MemtrackEventKind::Calloc { size },
2124
4 => MemtrackEventKind::AlignedAlloc { size },
2225
5 => MemtrackEventKind::Mmap { size },

crates/runner-shared/src/artifacts/memtrack.rs

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,30 @@ pub struct MemtrackEvent {
4848
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
4949
#[serde(tag = "type")]
5050
pub enum MemtrackEventKind {
51-
Malloc { size: u64 },
51+
Malloc {
52+
size: u64,
53+
},
5254
Free,
53-
Realloc { size: u64 },
54-
Calloc { size: u64 },
55-
AlignedAlloc { size: u64 },
56-
Mmap { size: u64 },
57-
Munmap { size: u64 },
58-
Brk { size: u64 },
55+
Realloc {
56+
#[serde(default, skip_serializing_if = "Option::is_none")]
57+
old_addr: Option<u64>,
58+
size: u64,
59+
},
60+
Calloc {
61+
size: u64,
62+
},
63+
AlignedAlloc {
64+
size: u64,
65+
},
66+
Mmap {
67+
size: u64,
68+
},
69+
Munmap {
70+
size: u64,
71+
},
72+
Brk {
73+
size: u64,
74+
},
5975
}
6076

6177
pub struct MemtrackEventStream<R: Read> {
@@ -158,4 +174,28 @@ mod tests {
158174

159175
Ok(())
160176
}
177+
178+
#[test]
179+
fn test_deserialize_realloc_compat() -> anyhow::Result<()> {
180+
// The file contains a single serialized event using the old format without `old_addr`:
181+
// MemtrackEventKind::Realloc { size: 42 }
182+
let buf = include_bytes!("../../testdata/realloc.MemtrackArtifact.msgpack");
183+
assert_eq!(
184+
MemtrackArtifact::decode_streamed(Cursor::new(buf))?.count(),
185+
1
186+
);
187+
188+
let event = MemtrackArtifact::decode_streamed(Cursor::new(buf))?
189+
.next()
190+
.unwrap();
191+
assert!(matches!(
192+
event.kind,
193+
MemtrackEventKind::Realloc {
194+
old_addr: None,
195+
size: 42
196+
}
197+
));
198+
199+
Ok(())
200+
}
161201
}
56 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)