Rollup merge of #123867 - eduardosm:unsafe-fns, r=ChrisDenton

Add `unsafe` to two functions with safety invariants
This commit is contained in:
Matthias Krüger
2024-04-12 21:47:00 +02:00
committed by GitHub
+14 -12
View File
@@ -45,13 +45,11 @@ pub unsafe fn new(stack: usize, p: Box<dyn FnOnce()>) -> io::Result<Thread> {
Err(io::Error::last_os_error())
};
extern "system" fn thread_start(main: *mut c_void) -> c::DWORD {
unsafe {
// Next, reserve some stack space for if we otherwise run out of stack.
stack_overflow::reserve_stack();
// Finally, let's run some code.
Box::from_raw(main as *mut Box<dyn FnOnce()>)();
}
unsafe extern "system" fn thread_start(main: *mut c_void) -> c::DWORD {
// Next, reserve some stack space for if we otherwise run out of stack.
stack_overflow::reserve_stack();
// Finally, let's run some code.
Box::from_raw(main as *mut Box<dyn FnOnce()>)();
0
}
}
@@ -59,15 +57,19 @@ extern "system" fn thread_start(main: *mut c_void) -> c::DWORD {
pub fn set_name(name: &CStr) {
if let Ok(utf8) = name.to_str() {
if let Ok(utf16) = to_u16s(utf8) {
Self::set_name_wide(&utf16)
unsafe {
// SAFETY: the vec returned by `to_u16s` ends with a zero value
Self::set_name_wide(&utf16)
}
};
};
}
pub fn set_name_wide(name: &[u16]) {
unsafe {
c::SetThreadDescription(c::GetCurrentThread(), name.as_ptr());
};
/// # Safety
///
/// `name` must end with a zero value
pub unsafe fn set_name_wide(name: &[u16]) {
c::SetThreadDescription(c::GetCurrentThread(), name.as_ptr());
}
pub fn join(self) {