Skip to content

Commit 825def0

Browse files
authored
Rollup merge of rust-lang#128817 - biabbas:vxworks_update, r=tgross35
VxWorks code refactored 1. Extern TaskNameSet as minimum supported version of os is VxWorks 7 which would have taskNameSet 2. Vx_TASK_NAME_LEN is 31 on VxWorks7, defined variable res. 3. Add unsafe blocks on Non::Zero usage in available_parallelism() 4. Update vxworks docs. r? `@tgross35` cc `@devnexen`
2 parents f74940d + 39b1eaf commit 825def0

File tree

1 file changed

+13
-23
lines changed

1 file changed

+13
-23
lines changed

Diff for: std/src/sys/pal/unix/thread.rs

+13-23
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@ use crate::mem::{self, ManuallyDrop};
33
use crate::num::NonZero;
44
#[cfg(all(target_os = "linux", target_env = "gnu"))]
55
use crate::sys::weak::dlsym;
6-
#[cfg(any(
7-
target_os = "solaris",
8-
target_os = "illumos",
9-
target_os = "nto",
10-
target_os = "vxworks"
11-
))]
6+
#[cfg(any(target_os = "solaris", target_os = "illumos", target_os = "nto",))]
127
use crate::sys::weak::weak;
138
use crate::sys::{os, stack_overflow};
149
use crate::time::Duration;
@@ -220,23 +215,16 @@ impl Thread {
220215
#[cfg(target_os = "vxworks")]
221216
pub fn set_name(name: &CStr) {
222217
// FIXME(libc): adding real STATUS, ERROR type eventually.
223-
weak! {
224-
fn taskNameSet(
225-
libc::TASK_ID, *mut libc::c_char
226-
) -> libc::c_int
218+
extern "C" {
219+
fn taskNameSet(task_id: libc::TASK_ID, task_name: *mut libc::c_char) -> libc::c_int;
227220
}
228221

229-
// We can't assume taskNameSet is necessarily available.
230-
// VX_TASK_NAME_LEN can be found set to 31,
231-
// however older versions can be set to only 10.
232-
// FIXME(vxworks): if the minimum supported VxWorks is >= 7, the maximum length can be changed to 31.
233-
if let Some(f) = taskNameSet.get() {
234-
const VX_TASK_NAME_LEN: usize = 10;
222+
// VX_TASK_NAME_LEN is 31 in VxWorks 7.
223+
const VX_TASK_NAME_LEN: usize = 31;
235224

236-
let name = truncate_cstr::<{ VX_TASK_NAME_LEN }>(name);
237-
let status = unsafe { f(libc::taskIdSelf(), name.as_mut_ptr()) };
238-
debug_assert_eq!(res, libc::OK);
239-
}
225+
let mut name = truncate_cstr::<{ VX_TASK_NAME_LEN }>(name);
226+
let res = unsafe { taskNameSet(libc::taskIdSelf(), name.as_mut_ptr()) };
227+
debug_assert_eq!(res, libc::OK);
240228
}
241229

242230
#[cfg(any(
@@ -489,9 +477,11 @@ pub fn available_parallelism() -> io::Result<NonZero<usize>> {
489477
fn vxCpuEnabledGet() -> libc::cpuset_t;
490478
}
491479

492-
// always fetches a valid bitmask
493-
let set = unsafe { vxCpuEnabledGet() };
494-
Ok(NonZero::new_unchecked(set.count_ones() as usize))
480+
// SAFETY: `vxCpuEnabledGet` always fetches a mask with at least one bit set
481+
unsafe{
482+
let set = vxCpuEnabledGet();
483+
Ok(NonZero::new_unchecked(set.count_ones() as usize))
484+
}
495485
} else {
496486
// FIXME: implement on Redox, l4re
497487
Err(io::const_io_error!(io::ErrorKind::Unsupported, "Getting the number of hardware threads is not supported on the target platform"))

0 commit comments

Comments
 (0)