Skip to content

Commit

Permalink
Implement named threads on Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
jsheard committed Sep 6, 2017
1 parent a209539 commit 8e80cee
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 7 deletions.
11 changes: 9 additions & 2 deletions src/libstd/sys/windows/c.rs
Expand Up @@ -32,6 +32,7 @@ pub type DWORD = c_ulong;
pub type HANDLE = LPVOID;
pub type HINSTANCE = HANDLE;
pub type HMODULE = HINSTANCE;
pub type HRESULT = LONG;
pub type BOOL = c_int;
pub type BYTE = u8;
pub type BOOLEAN = BYTE;
Expand Down Expand Up @@ -197,6 +198,8 @@ pub const ERROR_OPERATION_ABORTED: DWORD = 995;
pub const ERROR_IO_PENDING: DWORD = 997;
pub const ERROR_TIMEOUT: DWORD = 0x5B4;

pub const E_NOTIMPL: HRESULT = 0x80004001u32 as HRESULT;

pub const INVALID_HANDLE_VALUE: HANDLE = !0 as HANDLE;

pub const FACILITY_NT_BIT: DWORD = 0x1000_0000;
Expand Down Expand Up @@ -1163,8 +1166,8 @@ extern "system" {
timeout: *const timeval) -> c_int;
}

// Functions that aren't available on Windows XP, but we still use them and just
// provide some form of a fallback implementation.
// Functions that aren't available on every version of Windows that we support,
// but we still use them and just provide some form of a fallback implementation.
compat_fn! {
kernel32:

Expand All @@ -1182,6 +1185,10 @@ compat_fn! {
pub fn SetThreadStackGuarantee(_size: *mut c_ulong) -> BOOL {
SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); 0
}
pub fn SetThreadDescription(hThread: HANDLE,
lpThreadDescription: LPCWSTR) -> HRESULT {
SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); E_NOTIMPL
}
pub fn SetFileInformationByHandle(_hFile: HANDLE,
_FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
_lpFileInformation: LPVOID,
Expand Down
13 changes: 8 additions & 5 deletions src/libstd/sys/windows/thread.rs
Expand Up @@ -19,6 +19,8 @@ use sys::handle::Handle;
use sys_common::thread::*;
use time::Duration;

use super::to_u16s;

pub struct Thread {
handle: Handle
}
Expand Down Expand Up @@ -53,11 +55,12 @@ impl Thread {
}
}

pub fn set_name(_name: &CStr) {
// Windows threads are nameless
// The names in MSVC debugger are obtained using a "magic" exception,
// which requires a use of MS C++ extensions.
// See https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
pub fn set_name(name: &CStr) {
if let Ok(utf8) = name.to_str() {
if let Ok(utf16) = to_u16s(utf8) {
unsafe { c::SetThreadDescription(c::GetCurrentThread(), utf16.as_ptr()); };
};
};
}

pub fn join(self) {
Expand Down

0 comments on commit 8e80cee

Please sign in to comment.