forked from OSchip/llvm-project
Move lock acquire/release functions in task deque cleanup code
The original locations can be reached without initializing the lock variable (td_deque_lock), so it is potentially unsafe. It is guaranteed that the lock is initialized if the deque (td_deque) is not NULL, and lock functions can be safely called. Patch by Hansang Bae Differential Revision: https://reviews.llvm.org/D36017 llvm-svn: 309875
This commit is contained in:
parent
4f90c82aec
commit
1b536724d9
|
@ -2504,14 +2504,13 @@ static void __kmp_realloc_task_deque(kmp_info_t *thread,
|
||||||
// Deallocates a task deque for a particular thread. Happens at library
|
// Deallocates a task deque for a particular thread. Happens at library
|
||||||
// deallocation so don't need to reset all thread data fields.
|
// deallocation so don't need to reset all thread data fields.
|
||||||
static void __kmp_free_task_deque(kmp_thread_data_t *thread_data) {
|
static void __kmp_free_task_deque(kmp_thread_data_t *thread_data) {
|
||||||
__kmp_acquire_bootstrap_lock(&thread_data->td.td_deque_lock);
|
|
||||||
|
|
||||||
if (thread_data->td.td_deque != NULL) {
|
if (thread_data->td.td_deque != NULL) {
|
||||||
|
__kmp_acquire_bootstrap_lock(&thread_data->td.td_deque_lock);
|
||||||
TCW_4(thread_data->td.td_deque_ntasks, 0);
|
TCW_4(thread_data->td.td_deque_ntasks, 0);
|
||||||
__kmp_free(thread_data->td.td_deque);
|
__kmp_free(thread_data->td.td_deque);
|
||||||
thread_data->td.td_deque = NULL;
|
thread_data->td.td_deque = NULL;
|
||||||
|
__kmp_release_bootstrap_lock(&thread_data->td.td_deque_lock);
|
||||||
}
|
}
|
||||||
__kmp_release_bootstrap_lock(&thread_data->td.td_deque_lock);
|
|
||||||
|
|
||||||
#ifdef BUILD_TIED_TASK_STACK
|
#ifdef BUILD_TIED_TASK_STACK
|
||||||
// GEH: Figure out what to do here for td_susp_tied_tasks
|
// GEH: Figure out what to do here for td_susp_tied_tasks
|
||||||
|
|
Loading…
Reference in New Issue