mmtk/util/metadata/
pin_bit.rs1use crate::util::ObjectReference;
2use crate::vm::VMBinding;
3use crate::vm::VMLocalPinningBitSpec;
4use std::sync::atomic::Ordering;
5
6impl VMLocalPinningBitSpec {
7 pub fn pin_object<VM: VMBinding>(&self, object: ObjectReference) -> bool {
10 let res = self.compare_exchange_metadata::<VM, u8>(
11 object,
12 0,
13 1,
14 None,
15 Ordering::SeqCst,
16 Ordering::SeqCst,
17 );
18
19 res.is_ok()
20 }
21
22 pub fn unpin_object<VM: VMBinding>(&self, object: ObjectReference) -> bool {
25 let res = self.compare_exchange_metadata::<VM, u8>(
26 object,
27 1,
28 0,
29 None,
30 Ordering::SeqCst,
31 Ordering::SeqCst,
32 );
33
34 res.is_ok()
35 }
36
37 pub fn is_object_pinned<VM: VMBinding>(&self, object: ObjectReference) -> bool {
39 if unsafe { self.load::<VM, u8>(object, None) == 1 } {
40 return true;
41 }
42
43 false
44 }
45}