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
commit 3026204e84
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -45,13 +45,11 @@ impl Thread {
Err(io::Error::last_os_error()) Err(io::Error::last_os_error())
}; };
extern "system" fn thread_start(main: *mut c_void) -> c::DWORD { unsafe 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.
// Next, reserve some stack space for if we otherwise run out of stack. stack_overflow::reserve_stack();
stack_overflow::reserve_stack(); // Finally, let's run some code.
// Finally, let's run some code. Box::from_raw(main as *mut Box<dyn FnOnce()>)();
Box::from_raw(main as *mut Box<dyn FnOnce()>)();
}
0 0
} }
} }
@ -59,15 +57,19 @@ impl Thread {
pub fn set_name(name: &CStr) { pub fn set_name(name: &CStr) {
if let Ok(utf8) = name.to_str() { if let Ok(utf8) = name.to_str() {
if let Ok(utf16) = to_u16s(utf8) { 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]) { /// # Safety
unsafe { ///
c::SetThreadDescription(c::GetCurrentThread(), name.as_ptr()); /// `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) { pub fn join(self) {