// NEW immutable layout/ownership observation appended only to generated Queue. // No Member, Prepared, backend loan or release authority escapes. impl ReturnQueue { pub fn os_k1060_owner_words(&self) -> [u64; 16] { let q = &self.queue.queue; let p = self.pending.as_ref(); [ q.identity, q.cpu as u64, q.epoch, q.active.map_or(0, |i| i as u64 + 1), u64::from(q.faulted), q.total_ticks, q.len as u64, self.sequence, p.map_or(0, |p| { p as *const PendingQueueReturn as u64 }), p.map_or(0, |p| p.nonce), p.map_or(0, |p| { if p.stage == QueueReturnStage::Staged { 1 } else { 2 } }), p.map_or(0, |p| p.source as u64), p.map_or(0, |p| p.generation), p.map_or(0, |p| &p.prepared as *const B::ReturnPrepared as u64), core::mem::size_of::() as u64, u64::from(self.quarantined), ] } pub fn os_k1060_member_words(&self) -> [[u64; 16]; N] { let q = &self.queue.queue; core::array::from_fn(|i| { let e = &q.entries[i]; [ i as u64, e.generation, e.member .as_ref() .map_or(0, |m| m as *const B::Member as u64), e.thread.map_or(0, |t| t.table()), e.thread.map_or(0, |t| t.slot() as u64), e.thread.map_or(0, |t| t.generation()), if e.class == Class::Normal { 0 } else { 1 }, e.remaining as u64, e.slice, e.consumed_ticks, e.slices, u64::from(q.ready[..q.len].contains(&i)), u64::from(q.active == Some(i)), &q.backend as *const B as u64, core::mem::size_of::() as u64, core::mem::size_of::() as u64, ] }) } } pub const fn os_k1060_return_layout() -> [u64; 40] { use core::mem::{offset_of, size_of}; [ size_of::>() as u64, offset_of!(ReturnQueue,queue) as u64, offset_of!(ReturnQueue,sequence) as u64, offset_of!(ReturnQueue,pending) as u64, offset_of!(ReturnQueue,quarantined) as u64, size_of::>() as u64, offset_of!(AsyncQueue,queue) as u64, offset_of!(AsyncQueue,sequence) as u64, offset_of!(AsyncQueue,pending) as u64, offset_of!(AsyncQueue,quarantined) as u64, size_of::>() as u64, offset_of!(Queue,backend) as u64, offset_of!(Queue,identity) as u64, offset_of!(Queue,cpu) as u64, offset_of!(Queue,entries) as u64, offset_of!(Queue,ready) as u64, offset_of!(Queue,len) as u64, offset_of!(Queue,active) as u64, offset_of!(Queue,epoch) as u64, offset_of!(Queue,total_ticks) as u64, offset_of!(Queue,faulted) as u64, size_of::>() as u64, offset_of!(Entry, generation) as u64, offset_of!(Entry, member) as u64, offset_of!(Entry, thread) as u64, offset_of!(Entry, class) as u64, offset_of!(Entry, remaining) as u64, offset_of!(Entry, slice) as u64, offset_of!(Entry, consumed_ticks) as u64, offset_of!(Entry, slices) as u64, size_of::>() as u64, offset_of!(PendingQueueReturn, nonce) as u64, offset_of!(PendingQueueReturn, source) as u64, offset_of!(PendingQueueReturn, generation) as u64, offset_of!(PendingQueueReturn, epoch) as u64, offset_of!(PendingQueueReturn, prepared) as u64, offset_of!(PendingQueueReturn, stage) as u64, size_of::() as u64, size_of::() as u64, N as u64, ] }