diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2021-09-16 14:41:09 +0200 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2021-09-16 14:41:09 +0200 |
| commit | af7eededaa2a239c1e23c40024cf557a4b83fffa (patch) | |
| tree | ed49e515f70c15c1b8b0591a798f5df9c61778ec /library/std/src/thread | |
| parent | 6f6bb16718ffd4b143762be576b237efbedd38b4 (diff) | |
| download | rust-af7eededaa2a239c1e23c40024cf557a4b83fffa.tar.gz rust-af7eededaa2a239c1e23c40024cf557a4b83fffa.zip | |
Remove an allocation from rt::init
Previously the thread name would first be heap allocated and then re-allocated to add a nul terminator. Now it will be heap allocated only once with nul terminator added form the start.
Diffstat (limited to 'library/std/src/thread')
| -rw-r--r-- | library/std/src/thread/mod.rs | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/library/std/src/thread/mod.rs b/library/std/src/thread/mod.rs index f44df845bf4..9d659102b03 100644 --- a/library/std/src/thread/mod.rs +++ b/library/std/src/thread/mod.rs @@ -457,7 +457,9 @@ impl Builder { let stack_size = stack_size.unwrap_or_else(thread::min_stack); - let my_thread = Thread::new(name); + let my_thread = Thread::new(name.map(|name| { + CString::new(name).expect("thread name may not contain interior null bytes") + })); let their_thread = my_thread.clone(); let my_packet: Arc<UnsafeCell<Option<Result<T>>>> = Arc::new(UnsafeCell::new(None)); @@ -1073,12 +1075,8 @@ pub struct Thread { impl Thread { // Used only internally to construct a thread object without spawning // Panics if the name contains nuls. - 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")); - Thread { - inner: Arc::new(Inner { name: cname, id: ThreadId::new(), parker: Parker::new() }), - } + pub(crate) fn new(name: Option<CString>) -> Thread { + Thread { inner: Arc::new(Inner { name, id: ThreadId::new(), parker: Parker::new() }) } } /// Atomically makes the handle's token available if it is not already. |
