mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 08:44:35 +00:00
std:🧵 set_name implementation proposal for vxWorks.
This commit is contained in:
parent
60d146580c
commit
b9e8e99198
@ -3,7 +3,12 @@ use crate::mem::{self, ManuallyDrop};
|
|||||||
use crate::num::NonZero;
|
use crate::num::NonZero;
|
||||||
#[cfg(all(target_os = "linux", target_env = "gnu"))]
|
#[cfg(all(target_os = "linux", target_env = "gnu"))]
|
||||||
use crate::sys::weak::dlsym;
|
use crate::sys::weak::dlsym;
|
||||||
#[cfg(any(target_os = "solaris", target_os = "illumos", target_os = "nto"))]
|
#[cfg(any(
|
||||||
|
target_os = "solaris",
|
||||||
|
target_os = "illumos",
|
||||||
|
target_os = "nto",
|
||||||
|
target_os = "vxworks"
|
||||||
|
))]
|
||||||
use crate::sys::weak::weak;
|
use crate::sys::weak::weak;
|
||||||
use crate::sys::{os, stack_overflow};
|
use crate::sys::{os, stack_overflow};
|
||||||
use crate::time::Duration;
|
use crate::time::Duration;
|
||||||
@ -212,17 +217,38 @@ impl Thread {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "vxworks")]
|
||||||
|
pub fn set_name(name: &CStr) {
|
||||||
|
// FIXME(libc): adding real STATUS, ERROR type eventually.
|
||||||
|
weak! {
|
||||||
|
fn taskNameSet(
|
||||||
|
libc::TASK_ID, *mut libc::c_char
|
||||||
|
) -> libc::c_int
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can't assume taskNameSet is necessarily available.
|
||||||
|
// VX_TASK_NAME_LEN can be found set to 31,
|
||||||
|
// however older versions can be set to only 10.
|
||||||
|
// FIXME(vxworks): if the minimum supported VxWorks is >= 7, the maximum length can be changed to 31.
|
||||||
|
if let Some(f) = taskNameSet.get() {
|
||||||
|
const VX_TASK_NAME_LEN: usize = 10;
|
||||||
|
|
||||||
|
let name = truncate_cstr::<{ VX_TASK_NAME_LEN }>(name);
|
||||||
|
let status = unsafe { f(libc::taskIdSelf(), name.as_mut_ptr()) };
|
||||||
|
debug_assert_eq!(res, libc::OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(any(
|
#[cfg(any(
|
||||||
target_env = "newlib",
|
target_env = "newlib",
|
||||||
target_os = "l4re",
|
target_os = "l4re",
|
||||||
target_os = "emscripten",
|
target_os = "emscripten",
|
||||||
target_os = "redox",
|
target_os = "redox",
|
||||||
target_os = "vxworks",
|
|
||||||
target_os = "hurd",
|
target_os = "hurd",
|
||||||
target_os = "aix",
|
target_os = "aix",
|
||||||
))]
|
))]
|
||||||
pub fn set_name(_name: &CStr) {
|
pub fn set_name(_name: &CStr) {
|
||||||
// Newlib, Emscripten, and VxWorks have no way to set a thread name.
|
// Newlib and Emscripten have no way to set a thread name.
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "espidf"))]
|
#[cfg(not(target_os = "espidf"))]
|
||||||
@ -291,6 +317,7 @@ impl Drop for Thread {
|
|||||||
target_os = "nto",
|
target_os = "nto",
|
||||||
target_os = "solaris",
|
target_os = "solaris",
|
||||||
target_os = "illumos",
|
target_os = "illumos",
|
||||||
|
target_os = "vxworks",
|
||||||
target_vendor = "apple",
|
target_vendor = "apple",
|
||||||
))]
|
))]
|
||||||
fn truncate_cstr<const MAX_WITH_NUL: usize>(cstr: &CStr) -> [libc::c_char; MAX_WITH_NUL] {
|
fn truncate_cstr<const MAX_WITH_NUL: usize>(cstr: &CStr) -> [libc::c_char; MAX_WITH_NUL] {
|
||||||
|
Loading…
Reference in New Issue
Block a user