This reverts #121666 due to #123495
This commit is contained in:
Chris Denton 2024-04-05 12:50:31 +00:00
parent d009f60b55
commit 7d008267dd
No known key found for this signature in database
GPG Key ID: 713472F2F45627DE
13 changed files with 10 additions and 164 deletions

View File

@ -2,7 +2,7 @@
use super::abi;
use super::thread_local_dtor::run_dtors;
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::mem;
use crate::num::NonZero;
@ -71,10 +71,6 @@ impl Thread {
// nope
}
pub fn get_name() -> Option<CString> {
None
}
#[inline]
pub fn sleep(dur: Duration) {
unsafe {

View File

@ -8,7 +8,7 @@ use super::{
};
use crate::{
cell::UnsafeCell,
ffi::{CStr, CString},
ffi::CStr,
hint, io,
mem::ManuallyDrop,
num::NonZero,
@ -204,10 +204,6 @@ impl Thread {
// nope
}
pub fn get_name() -> Option<CString> {
None
}
pub fn sleep(dur: Duration) {
for timeout in dur2reltims(dur) {
expect_success(unsafe { abi::dly_tsk(timeout) }, &"dly_tsk");

View File

@ -1,6 +1,6 @@
#![cfg_attr(test, allow(dead_code))] // why is this necessary?
use super::unsupported;
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::num::NonZero;
use crate::time::Duration;
@ -133,10 +133,6 @@ impl Thread {
// which succeeds as-is with the SGX target.
}
pub fn get_name() -> Option<CString> {
None
}
pub fn sleep(dur: Duration) {
usercalls::wait_timeout(0, dur, || true);
}

View File

@ -1,7 +1,7 @@
use core::convert::TryInto;
use crate::cmp;
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::mem;
use crate::num::NonZero;
@ -101,10 +101,6 @@ impl Thread {
// contact the teeos rustzone team.
}
pub fn get_name() -> Option<CString> {
None
}
/// only main thread could wait for sometime in teeos
pub fn sleep(dur: Duration) {
let sleep_millis = dur.as_millis();

View File

@ -1,5 +1,5 @@
use super::unsupported;
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::num::NonZero;
use crate::ptr::NonNull;
@ -23,10 +23,6 @@ impl Thread {
// nope
}
pub fn get_name() -> Option<CString> {
None
}
pub fn sleep(dur: Duration) {
let boot_services: NonNull<r_efi::efi::BootServices> =
crate::os::uefi::env::boot_services().expect("can't sleep").cast();

View File

@ -1,5 +1,5 @@
use crate::cmp;
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::mem;
use crate::num::NonZero;
@ -228,78 +228,6 @@ impl Thread {
// Newlib, Emscripten, and VxWorks have no way to set a thread name.
}
#[cfg(any(
target_os = "linux",
target_os = "freebsd",
target_os = "netbsd",
target_os = "solaris",
target_os = "illumos"
))]
pub fn get_name() -> Option<CString> {
#[cfg(target_os = "linux")]
const TASK_COMM_LEN: usize = 16;
#[cfg(target_os = "freebsd")]
const TASK_COMM_LEN: usize = libc::MAXCOMLEN + 1;
#[cfg(any(target_os = "netbsd", target_os = "solaris", target_os = "illumos"))]
const TASK_COMM_LEN: usize = 32;
let mut name = vec![0u8; TASK_COMM_LEN];
let res = unsafe {
libc::pthread_getname_np(libc::pthread_self(), name.as_mut_ptr().cast(), name.len())
};
if res != 0 {
return None;
}
name.truncate(name.iter().position(|&c| c == 0)?);
CString::new(name).ok()
}
#[cfg(any(target_os = "macos", target_os = "ios", target_os = "tvos", target_os = "watchos"))]
pub fn get_name() -> Option<CString> {
let mut name = vec![0u8; libc::MAXTHREADNAMESIZE];
let res = unsafe {
libc::pthread_getname_np(libc::pthread_self(), name.as_mut_ptr().cast(), name.len())
};
if res != 0 {
return None;
}
name.truncate(name.iter().position(|&c| c == 0)?);
CString::new(name).ok()
}
#[cfg(target_os = "haiku")]
pub fn get_name() -> Option<CString> {
unsafe {
let mut tinfo = mem::MaybeUninit::<libc::thread_info>::uninit();
// See BeOS teams group and threads api.
// https://www.haiku-os.org/legacy-docs/bebook/TheKernelKit_ThreadsAndTeams_Overview.html
let thread_self = libc::find_thread(ptr::null_mut());
let res = libc::get_thread_info(thread_self, tinfo.as_mut_ptr());
if res != libc::B_OK {
return None;
}
let info = tinfo.assume_init();
let name =
core::slice::from_raw_parts(info.name.as_ptr() as *const u8, info.name.len());
CStr::from_bytes_until_nul(name).map(CStr::to_owned).ok()
}
}
#[cfg(not(any(
target_os = "linux",
target_os = "freebsd",
target_os = "netbsd",
target_os = "macos",
target_os = "ios",
target_os = "tvos",
target_os = "watchos",
target_os = "haiku",
target_os = "solaris",
target_os = "illumos"
)))]
pub fn get_name() -> Option<CString> {
None
}
#[cfg(not(target_os = "espidf"))]
pub fn sleep(dur: Duration) {
let mut secs = dur.as_secs();

View File

@ -1,5 +1,5 @@
use super::unsupported;
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::num::NonZero;
use crate::time::Duration;
@ -22,10 +22,6 @@ impl Thread {
// nope
}
pub fn get_name() -> Option<CString> {
None
}
pub fn sleep(_dur: Duration) {
panic!("can't sleep");
}

View File

@ -1,4 +1,4 @@
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::mem;
use crate::num::NonZero;
@ -134,10 +134,6 @@ impl Thread {
// nope
}
pub fn get_name() -> Option<CString> {
None
}
pub fn sleep(dur: Duration) {
let nanos = dur.as_nanos();
assert!(nanos <= u64::MAX as u128);

View File

@ -1,5 +1,4 @@
use crate::ffi::CStr;
use crate::ffi::CString;
use crate::io;
use crate::num::NonZero;
use crate::sys::unsupported;
@ -18,9 +17,6 @@ impl Thread {
pub fn yield_now() {}
pub fn set_name(_name: &CStr) {}
pub fn get_name() -> Option<CString> {
None
}
pub fn sleep(dur: Duration) {
use crate::arch::wasm32;

View File

@ -9,7 +9,6 @@ use crate::sys::handle::Handle;
use crate::sys::stack_overflow;
use crate::sys_common::FromInner;
use crate::time::Duration;
use alloc::ffi::CString;
use core::ffi::c_void;
use super::time::WaitableTimer;
@ -67,29 +66,6 @@ impl Thread {
};
}
pub fn get_name() -> Option<CString> {
unsafe {
let mut ptr = core::ptr::null_mut();
let result = c::GetThreadDescription(c::GetCurrentThread(), &mut ptr);
if result < 0 {
return None;
}
let name = String::from_utf16_lossy({
let mut len = 0;
while *ptr.add(len) != 0 {
len += 1;
}
core::slice::from_raw_parts(ptr, len)
})
.into_bytes();
// Attempt to free the memory.
// This should never fail but if it does then there's not much we can do about it.
let result = c::LocalFree(ptr.cast::<c_void>());
debug_assert!(result.is_null());
if name.is_empty() { None } else { Some(CString::from_vec_unchecked(name)) }
}
}
pub fn join(self) {
let rc = unsafe { c::WaitForSingleObject(self.handle.as_raw_handle(), c::INFINITE) };
if rc == c::WAIT_FAILED {

View File

@ -1,4 +1,4 @@
use crate::ffi::{CStr, CString};
use crate::ffi::CStr;
use crate::io;
use crate::num::NonZero;
use crate::os::xous::ffi::{
@ -113,10 +113,6 @@ impl Thread {
// nope
}
pub fn get_name() -> Option<CString> {
None
}
pub fn sleep(dur: Duration) {
// Because the sleep server works on units of `usized milliseconds`, split
// the messages up into these chunks. This means we may run into issues

View File

@ -694,9 +694,7 @@ pub(crate) fn set_current(thread: Thread) {
/// In contrast to the public `current` function, this will not panic if called
/// from inside a TLS destructor.
pub(crate) fn try_current() -> Option<Thread> {
CURRENT
.try_with(|current| current.get_or_init(|| Thread::new(imp::Thread::get_name())).clone())
.ok()
CURRENT.try_with(|current| current.get_or_init(|| Thread::new(None)).clone()).ok()
}
/// Gets a handle to the thread that invokes it.

View File

@ -69,26 +69,6 @@ fn test_named_thread_truncation() {
result.unwrap().join().unwrap();
}
#[cfg(any(
all(target_os = "windows", not(target_vendor = "win7")),
target_os = "linux",
target_os = "macos",
target_os = "ios",
target_os = "tvos",
target_os = "watchos"
))]
#[test]
fn test_get_os_named_thread() {
use crate::sys::thread::Thread;
// Spawn a new thread to avoid interfering with other tests running on this thread.
let handler = thread::spawn(|| {
let name = c"test me please";
Thread::set_name(name);
assert_eq!(name, Thread::get_name().unwrap().as_c_str());
});
handler.join().unwrap();
}
#[test]
#[should_panic]
fn test_invalid_named_thread() {