Minor code cleanup
Details
Diff Detail
- Repository
- rL LLVM
Event Timeline
| runtime/src/kmp_runtime.cpp | ||
|---|---|---|
| 5537 | Is there a reason for not putting this into the __kmp_free_implicit_task function? | |
| runtime/src/kmp_tasking.cpp | ||
|---|---|---|
| 990 | Moving above task=NULL here makes the data race visible. My suggestion: kmp_taskdata_t *task = NULL;
<atomic_swap>(task, thread->th.th_current_task);
if (task && task->td_dephash) {
...Whatever "atomic swap" function would be applicable. | |
| runtime/src/kmp_runtime.cpp | ||
|---|---|---|
| 5537 | There are cases where the thread structure is cleaned to be re-used, then the zeroing makes sense. So to me it looks logical to have the assignment here. | |
| runtime/src/kmp_tasking.cpp | ||
| 990 | Sorry, I haven't got what is the data race you are talking about. | |
| runtime/src/kmp_runtime.cpp | ||
|---|---|---|
| 5537 | This is the only place, where __kmp_free_implicit_task is called. So semantically, there is no difference for moving the assignment into the function. | |
| runtime/src/kmp_tasking.cpp | ||
| 990 | Moving above assignment into the function: void __kmp_free_implicit_task(kmp_info_t *thread) {
kmp_taskdata_t *task = thread->th.th_current_task;
if (task && task->td_dephash) {
__kmp_dephash_free(thread, task->td_dephash);
task->td_dephash = NULL;
}
thread->th.th_current_task = NULL;
}From the comment in above code I understood, that various threads might call this function with the same argument? | |
| runtime/src/kmp_runtime.cpp | ||
|---|---|---|
| 5537 | There is another use of this function in __kmp_reap_thread that does not nullify th_current_task after it. | |
| runtime/src/kmp_tasking.cpp | ||
|---|---|---|
| 990 | In the context of __kmp_free_thread the assignment to NULL is safe. The context of __kmp_free_thread is either being called by a master thread allocating or changing team size under a lock, or freeing non-hot teams, so there should be no race. | |
Is there a reason for not putting this into the __kmp_free_implicit_task function?