diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-02-28 00:34:43 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-02-28 00:34:43 -0500 |
commit | a999dc0a9f22a2f403defa26d09257f7600a4312 (patch) | |
tree | c4ca18c538d80c57b45a54ac0c60ead26b7bf210 /rust-src/bch_bindgen | |
parent | a8dbc331f071b118ceb6a274880d26b6a9cc8c4b (diff) |
bcachefs: Annotate BtreeIter with BtreeTrans lifetime
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'rust-src/bch_bindgen')
-rw-r--r-- | rust-src/bch_bindgen/src/btree.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/rust-src/bch_bindgen/src/btree.rs b/rust-src/bch_bindgen/src/btree.rs index 405b7527..db5d6c6d 100644 --- a/rust-src/bch_bindgen/src/btree.rs +++ b/rust-src/bch_bindgen/src/btree.rs @@ -2,6 +2,7 @@ use crate::SPOS_MAX; use crate::c; use crate::fs::Fs; use crate::errcode::{bch_errcode, errptr_to_result_c}; +use std::marker::PhantomData; use std::mem::MaybeUninit; use std::ptr; use bitflags::bitflags; @@ -48,22 +49,24 @@ bitflags! { } } -pub struct BtreeIter { +pub struct BtreeIter<'a> { raw: c::btree_iter, + trans: PhantomData<&'a BtreeTrans>, } -impl BtreeIter { - pub fn new<'a>(trans: &'a BtreeTrans, btree: c::btree_id, pos: c::bpos, flags: BtreeIterFlags) -> BtreeIter { +impl<'a> BtreeIter<'a> { + pub fn new(trans: &'a BtreeTrans, btree: c::btree_id, pos: c::bpos, flags: BtreeIterFlags) -> BtreeIter { unsafe { - let mut iter: MaybeUninit<BtreeIter> = MaybeUninit::uninit(); + let mut iter: MaybeUninit<c::btree_iter> = MaybeUninit::uninit(); c::bch2_trans_iter_init_outlined( ptr::addr_of!(trans.raw).cast_mut(), - &mut (*iter.as_mut_ptr()).raw, + &mut (*iter.as_mut_ptr()), btree as u32, pos, flags.bits as u32); - iter.assume_init() + + BtreeIter { raw: iter.assume_init(), trans: PhantomData } } } @@ -94,7 +97,7 @@ impl BtreeIter { } } -impl Drop for BtreeIter { +impl<'a> Drop for BtreeIter<'a> { fn drop(&mut self) { unsafe { c::bch2_trans_iter_exit(self.raw.trans, &mut self.raw) } } |