fix Value<T>, take 2
This commit is contained in:
parent
ebec679875
commit
c3804c8930
|
@ -216,12 +216,11 @@ mod job {
|
||||||
|
|
||||||
// SAFETY: we know the box is allocated if state was `Pending`.
|
// SAFETY: we know the box is allocated if state was `Pending`.
|
||||||
if inline {
|
if inline {
|
||||||
let mut this = Self(MaybeUninit::uninit());
|
let this = MaybeUninit::new(Self(MaybeUninit::uninit()));
|
||||||
unsafe {
|
unsafe {
|
||||||
*mem::transmute::<&mut MaybeUninit<Box<MaybeUninit<T>>>, &mut T>(&mut this.0) =
|
this.as_ptr().cast::<T>().cast_mut().write(value);
|
||||||
value;
|
this.assume_init()
|
||||||
}
|
}
|
||||||
this
|
|
||||||
} else {
|
} else {
|
||||||
Self(MaybeUninit::new(Box::new(MaybeUninit::new(value))))
|
Self(MaybeUninit::new(Box::new(MaybeUninit::new(value))))
|
||||||
}
|
}
|
||||||
|
@ -230,10 +229,8 @@ mod job {
|
||||||
|
|
||||||
impl<T> Drop for Value<T> {
|
impl<T> Drop for Value<T> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
unsafe {
|
|
||||||
// drop contained value.
|
// drop contained value.
|
||||||
_ = self.get_unchecked(Self::is_inline());
|
drop(unsafe { self.get_unchecked(Self::is_inline()) });
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -500,13 +497,16 @@ mod job {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// assumes job is in joblist
|
/// assumes job is in joblist
|
||||||
pub unsafe fn unlink(&self) -> Option<()> {
|
pub unsafe fn unlink(&self) {
|
||||||
unsafe {
|
unsafe {
|
||||||
let link = self.link_mut();
|
let link = *self.link_mut();
|
||||||
link.prev?.as_ref().link_mut().next = link.next;
|
if let Some(prev) = link.prev {
|
||||||
link.next?.as_ref().link_mut().prev = link.prev;
|
prev.as_ref().link_mut().next = link.next;
|
||||||
|
}
|
||||||
|
if let Some(next) = link.next {
|
||||||
|
next.as_ref().link_mut().prev = link.prev;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Some(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn state(&self) -> u8 {
|
pub fn state(&self) -> u8 {
|
||||||
|
|
Loading…
Reference in a new issue