# HG changeset patch # User Yuya Nishihara # Date 2019-09-15 13:43:32 # Node ID 06080afd05650a9d614d6b69a22dd1cd627ecd92 # Parent a2dffe68b4eac19250cb3eb2a14ff765bb10a011 rust-cpython: add sanity check to PySharedState::decrease_leak_count() If decrease_leak_count() were called unnecessarily, there must be a serious bug. It's better to not silently ignore such cases. diff --git a/rust/hg-cpython/src/ref_sharing.rs b/rust/hg-cpython/src/ref_sharing.rs --- a/rust/hg-cpython/src/ref_sharing.rs +++ b/rust/hg-cpython/src/ref_sharing.rs @@ -85,10 +85,14 @@ impl PySharedState { /// It's unsafe to update the reference count without knowing the /// reference is deleted. Do not call this function directly. pub unsafe fn decrease_leak_count(&self, _py: Python, mutable: bool) { - self.leak_count - .replace(self.leak_count.get().saturating_sub(1)); if mutable { + assert_eq!(self.leak_count.get(), 0); + assert!(self.mutably_borrowed.get()); self.mutably_borrowed.replace(false); + } else { + let count = self.leak_count.get(); + assert!(count > 0); + self.leak_count.replace(count - 1); } } }