Rollup merge of #40503 - swgillespie:thread-hack-removal, r=sfackler
std: remove a workaround for privacy limitations
`std:🧵:Thread` implements a non-exported `NewThread` trait to allow for internal-only use of `Thread::new`. Nowadays we have `pub(crate)`, which accomplishes the same thing but much more idiomatically.
Rustdoc handles this correctly (I checked and I didn't see `Thread::new` on the rustdoc entry for `Thread` with this change), and the stage1 `rustc` emits the correct error still (I'm assuming that the stage1 compiler uses my `libstd`?):
```
$ ./build/x86_64-apple-darwin/stage1/bin/rustc test.rs
error: method `new` is private
--> test.rs:4:18
|
4 | let thread = thread::Thread::new(None);
| ^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
```
This commit is contained in:
commit
d7a09d4e65
@ -34,7 +34,7 @@ fn lang_start(main: *const u8, argc: isize, argv: *const *const u8) -> isize {
|
||||
use panic;
|
||||
use sys;
|
||||
use sys_common;
|
||||
use sys_common::thread_info::{self, NewThread};
|
||||
use sys_common::thread_info;
|
||||
use thread::Thread;
|
||||
|
||||
sys::init();
|
||||
@ -47,7 +47,7 @@ fn lang_start(main: *const u8, argc: isize, argv: *const *const u8) -> isize {
|
||||
// created. Note that this isn't necessary in general for new threads,
|
||||
// but we just do this to name the main thread and to give it correct
|
||||
// info about the stack bounds.
|
||||
let thread: Thread = NewThread::new(Some("main".to_owned()));
|
||||
let thread = Thread::new(Some("main".to_owned()));
|
||||
thread_info::set(main_guard, thread);
|
||||
|
||||
// Store our args if necessary in a squirreled away location
|
||||
|
@ -31,7 +31,7 @@ impl ThreadInfo {
|
||||
if c.borrow().is_none() {
|
||||
*c.borrow_mut() = Some(ThreadInfo {
|
||||
stack_guard: None,
|
||||
thread: NewThread::new(None),
|
||||
thread: Thread::new(None),
|
||||
})
|
||||
}
|
||||
Some(f(c.borrow_mut().as_mut().unwrap()))
|
||||
@ -54,8 +54,3 @@ pub fn set(stack_guard: Option<usize>, thread: Thread) {
|
||||
thread: thread,
|
||||
}));
|
||||
}
|
||||
|
||||
// a hack to get around privacy restrictions; implemented by `std::thread`
|
||||
pub trait NewThread {
|
||||
fn new(name: Option<String>) -> Self;
|
||||
}
|
||||
|
@ -745,7 +745,7 @@ pub struct Thread {
|
||||
|
||||
impl Thread {
|
||||
// Used only internally to construct a thread object without spawning
|
||||
fn new(name: Option<String>) -> Thread {
|
||||
pub(crate) fn new(name: Option<String>) -> Thread {
|
||||
let cname = name.map(|n| {
|
||||
CString::new(n).expect("thread name may not contain interior null bytes")
|
||||
});
|
||||
@ -858,11 +858,6 @@ impl fmt::Debug for Thread {
|
||||
}
|
||||
}
|
||||
|
||||
// a hack to get around privacy restrictions
|
||||
impl thread_info::NewThread for Thread {
|
||||
fn new(name: Option<String>) -> Thread { Thread::new(name) }
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// JoinHandle
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
x
Reference in New Issue
Block a user