mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Write poison to canary when removing item from diagnostic hashmap
This commit is contained in:
parent
8830f62a10
commit
b547e96b44
1 changed files with 9 additions and 0 deletions
|
@ -1,6 +1,7 @@
|
||||||
use hash_map::HashMap;
|
use hash_map::HashMap;
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
use std::hash::{BuildHasher, Hash};
|
use std::hash::{BuildHasher, Hash};
|
||||||
|
use std::ptr;
|
||||||
|
|
||||||
use FailedAllocationError;
|
use FailedAllocationError;
|
||||||
|
|
||||||
|
@ -9,6 +10,11 @@ const CANARY: usize = 0x42cafe99;
|
||||||
#[cfg(target_pointer_width = "64")]
|
#[cfg(target_pointer_width = "64")]
|
||||||
const CANARY: usize = 0x42cafe9942cafe99;
|
const CANARY: usize = 0x42cafe9942cafe99;
|
||||||
|
|
||||||
|
#[cfg(target_pointer_width = "32")]
|
||||||
|
const POISON: usize = 0xdeadbeef;
|
||||||
|
#[cfg(target_pointer_width = "64")]
|
||||||
|
const POISON: usize = 0xdeadbeefdeadbeef;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
enum JournalEntry {
|
enum JournalEntry {
|
||||||
Insert(usize),
|
Insert(usize),
|
||||||
|
@ -130,6 +136,9 @@ impl<K: Hash + Eq, V, S: BuildHasher> DiagnosticHashMap<K, V, S>
|
||||||
{
|
{
|
||||||
assert!(!self.readonly);
|
assert!(!self.readonly);
|
||||||
self.journal.push(JournalEntry::Remove(self.map.make_hash(k).inspect()));
|
self.journal.push(JournalEntry::Remove(self.map.make_hash(k).inspect()));
|
||||||
|
if let Some(v) = self.map.get_mut(k) {
|
||||||
|
unsafe { ptr::write_volatile(&mut v.0, POISON); }
|
||||||
|
}
|
||||||
self.map.remove(k).map(|x| x.1)
|
self.map.remove(k).map(|x| x.1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue