加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
backport-0001-w32-Use-cast-by-uintptr_t-for-thread-ID.patch 2.10 KB
一键复制 编辑 原始数据 按行查看 历史
From 377c1b91e67af25613ccb72ee26449661cea8d8e Mon Sep 17 00:00:00 2001
From: NIIBE Yutaka <gniibe@fsij.org>
Date: Thu, 8 Nov 2018 13:26:41 +0900
Subject: [PATCH 12/18] w32: Use cast by uintptr_t for thread ID.
* w32/npth.c (npth_init): Cast with uintptr_t.
(npth_setname_np, npth_create, npth_self): Likewise.
--
In w32/npth.h, npth_t is unsigned long int type, which is 32-bit
for both of 32-bit machine and 64-bit machine.
We use TlsSetValue, TlsGetValue and CreateThread API to handle
thread ID, which uses void * type, which is 64-bit on 64-bit
machine.
Because the size is different on 64-bit machine, here, we use explicit
cast to integer type which has enough size to have pointer.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
---
w32/npth.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/w32/npth.c b/w32/npth.c
index 6ea6d19..41213c0 100644
--- a/w32/npth.c
+++ b/w32/npth.c
@@ -351,7 +351,7 @@ npth_init (void)
thread = thread_table[thread_id];
thread->handle = handle;
- if (! TlsSetValue(tls_index, (LPVOID) thread_id))
+ if (! TlsSetValue(tls_index, (LPVOID)(uintptr_t) thread_id))
return map_error (GetLastError());
LEAVE();
@@ -449,11 +449,11 @@ npth_setname_np (npth_t target_thread, const char *name)
static DWORD
thread_start (void *arg)
{
- npth_t thread_id = (npth_t) arg;
+ npth_t thread_id = (npth_t)(uintptr_t) arg;
npth_impl_t thread;
void *result;
- if (! TlsSetValue(tls_index, (LPVOID) thread_id))
+ if (! TlsSetValue(tls_index, (LPVOID)(uintptr_t) thread_id))
/* FIXME: There is not much we can do here. */
;
@@ -519,7 +519,7 @@ npth_create (npth_t *newthread, const npth_attr_t *user_attr,
handle = CreateThread (NULL, 0,
(LPTHREAD_START_ROUTINE)thread_start,
- (void *) thread_id, CREATE_SUSPENDED,
+ (void *)(uintptr_t) thread_id, CREATE_SUSPENDED,
NULL);
if (handle == NULL)
{
@@ -556,7 +556,7 @@ npth_self (void)
if (thread_id == 0 && GetLastError() != ERROR_SUCCESS)
/* FIXME: Log the error. */
;
- return (npth_t) thread_id;
+ return (npth_t)(uintptr_t) thread_id;
}
--
1.8.3.1
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化