mirror of
https://github.com/bertptrs/tracing-mutex.git
synced 2025-12-25 12:40:31 +01:00
Fix a graph invariant violation on cycle detection
This commit is contained in:
@@ -11,6 +11,9 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
type aliases function the same as the ones they belong to, resolving to either the tracing
|
||||
versions when debug assertions are enabled or the standard one when they're not.
|
||||
|
||||
### Fixed
|
||||
- Fixed a corruption error where deallocating a previously cyclic mutex could result in a panic.
|
||||
|
||||
## [0.1.1] - 2021-05-24
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -127,7 +127,7 @@ where
|
||||
// We use map instead of unwrap to avoid an `unwrap()` but we know that these
|
||||
// entries are present as we just added them above.
|
||||
self.nodes.get_mut(&y).map(|node| node.in_edges.remove(&x));
|
||||
self.nodes.get_mut(&x).map(|node| node.out_edges.remove(&x));
|
||||
self.nodes.get_mut(&x).map(|node| node.out_edges.remove(&y));
|
||||
|
||||
// No edge was added
|
||||
return false;
|
||||
|
||||
12
src/lib.rs
12
src/lib.rs
@@ -304,6 +304,18 @@ mod tests {
|
||||
assert!(get_dependency_graph().add_edge(c.value(), a.value()));
|
||||
}
|
||||
|
||||
/// Test creating a cycle, then panicking.
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn test_mutex_id_conflict() {
|
||||
let ids = [MutexId::new(), MutexId::new(), MutexId::new()];
|
||||
|
||||
for i in 0..3 {
|
||||
let _first_lock = ids[i].get_borrowed();
|
||||
let _second_lock = ids[(i + 1) % 3].get_borrowed();
|
||||
}
|
||||
}
|
||||
|
||||
/// Fuzz the global dependency graph by fake-acquiring lots of mutexes in a valid order.
|
||||
///
|
||||
/// This test generates all possible forward edges in a 100-node graph consisting of natural
|
||||
|
||||
Reference in New Issue
Block a user