use std::ptr;
use o3::base::marker::ThreadBound;
use crate::kernel;
#[repr(transparent)]
pub struct Handle(pub(super) libc::pthread_t, pub(super) ThreadBound);
impl Handle {
pub fn join(self) {
drop(self);
}
}
impl Drop for Handle {
fn drop(&mut self) {
if let Err(cause) = unsafe {
kernel::raw::Status::new(libc::pthread_join(self.0, ptr::null_mut())).try_pthread()
} {
kernel::Fatal::Join(cause).terminate()
}
}
}