[PATCH] rust-cpython: add sanity check to PySharedState::decrease_leak_count()

Yuya Nishihara yuya at tcha.org
Sun Sep 15 12:29:51 EDT 2019


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1568555012 -32400
#      Sun Sep 15 22:43:32 2019 +0900
# Node ID 071b35e3f7cde53cbf411a536091153741dc4a37
# Parent  34ed651ba7e4a4b7f0ee79c5a5442b5eed27bbad
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);
         }
     }
 }


More information about the Mercurial-devel mailing list