Mercurial > hg
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 |