comparison rust/hg-cpython/src/dirstate/dirs_multiset.rs @ 42850:8f549c46bc64

rust-cpython: pair leaked reference with its manager object Still leak_immutable() is unsafe since leak_handle must live longer than the leaked_ref.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 01 Sep 2019 17:48:24 +0900
parents 8db8fa1de2ef
children 64e28b891796
comparison
equal deleted inserted replaced
42849:8db8fa1de2ef 42850:8f549c46bc64
84 } 84 }
85 } 85 }
86 }) 86 })
87 } 87 }
88 def __iter__(&self) -> PyResult<DirsMultisetKeysIterator> { 88 def __iter__(&self) -> PyResult<DirsMultisetKeysIterator> {
89 let (leak_handle, leaked_ref) = self.leak_immutable(py)?;
89 DirsMultisetKeysIterator::create_instance( 90 DirsMultisetKeysIterator::create_instance(
90 py, 91 py,
91 RefCell::new(Some(DirsMultisetLeakedRef::new(py, &self))), 92 RefCell::new(Some(leak_handle)),
92 RefCell::new(Box::new(self.leak_immutable(py)?.iter())), 93 RefCell::new(Box::new(leaked_ref.iter())),
93 ) 94 )
94 } 95 }
95 96
96 def __contains__(&self, item: PyObject) -> PyResult<bool> { 97 def __contains__(&self, item: PyObject) -> PyResult<bool> {
97 Ok(self 98 Ok(self