[PATCH 02 of 10] rust-cpython: move borrow_mut() to PySharedRefCell

Yuya Nishihara yuya at tcha.org
Sat Oct 5 11:05:12 EDT 2019


On Sun, 22 Sep 2019 15:41:39 +0900, Yuya Nishihara wrote:
> # HG changeset patch
> # User Yuya Nishihara <yuya at tcha.org>
> # Date 1568470639 -32400
> #      Sat Sep 14 23:17:19 2019 +0900
> # Node ID 34a355c69f643f15ff46f4524c75137c08a8de3b
> # Parent  e7f643679476b013e86b9a2b75f704d64eec4293
> rust-cpython: move borrow_mut() to PySharedRefCell

> 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
> @@ -125,9 +125,15 @@ impl<T> PySharedRefCell<T> {
>          self.inner.as_ptr()
>      }
>  
> -    pub unsafe fn borrow_mut(&self) -> RefMut<T> {
> -        // must be borrowed by self.py_shared_state(py).borrow_mut().
> -        self.inner.borrow_mut()
> +    // TODO: maybe this should be named as try_borrow_mut(), and use
> +    // inner.try_borrow_mut(). The current implementation panics if
> +    // self.inner has been borrowed, but returns error if py_shared_state
> +    // refuses to borrow.
> +    pub fn borrow_mut<'a>(
> +        &'a self,
> +        py: Python<'a>,
> +    ) -> PyResult<PyRefMut<'a, T>> {

Actually this will be changed to borrow_mut() -> RefMut<'a, T> since
borrow_mut() will just mark leaked references poisoned. Mutation while
leaked will be just allowed.


More information about the Mercurial-devel mailing list