修复POSIX线程本地存储寻找posix线程句柄时的逻辑错误 #8790
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.


拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
修复POSIX线程本地存储寻找posix线程句柄时的逻辑错误
修复GCC emutls C++11 thread_local关键字的逻辑正确性
你的解决方案是什么 (what is your solution)
修改pthread_getspecific、pthread_setspecific函数中通过rt_thread_self()获取POSIX线程句柄的方式
ptd = (_pthread_data_t *)rt_thread_self()->user_data;修改为:
ptd = (_pthread_data_t *)rt_thread_self()->pthread_data;rt_thread_self()->user_data是RT-Thread原生private user_data
rt_thread_self()->pthread_data->tls是POSIX层TLS
请提供验证的bsp和config (provide the config and bsp)
bsp\stm32\stm32f407-atk-explorer
#define RT_USING_CPLUSPLUS
#define RT_USING_CPLUSPLUS11
编译通过:
修改前:
对于POSIX-TLS:
(ptd != NULL) assertion failed at function:pthread_setspecific, line number:61对于C++11 thread_local:
初始值由GCC传入,emutls为每个线程赋值。但获取TLS时出现问题
(ptd != NULL) assertion failed at function:pthread_getspecific, line number:36修改后:


能够正常使用:
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up