[Openmp-commits] [PATCH] D36017: Move lock acquire/release functions to safer locations in task deque cleanup code

Hansang Bae via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Fri Jul 28 13:57:07 PDT 2017


hbae created this revision.

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.


Repository:
  rL LLVM

https://reviews.llvm.org/D36017

Files:
  runtime/src/kmp_tasking.cpp


Index: runtime/src/kmp_tasking.cpp
===================================================================
--- runtime/src/kmp_tasking.cpp
+++ runtime/src/kmp_tasking.cpp
@@ -2504,14 +2504,13 @@
 // Deallocates a task deque for a particular thread. Happens at library
 // deallocation so don't need to reset all thread data fields.
 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) {
+    __kmp_acquire_bootstrap_lock(&thread_data->td.td_deque_lock);
     TCW_4(thread_data->td.td_deque_ntasks, 0);
     __kmp_free(thread_data->td.td_deque);
     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
   // GEH: Figure out what to do here for td_susp_tied_tasks


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D36017.108704.patch
Type: text/x-patch
Size: 933 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20170728/f04744a2/attachment.bin>


More information about the Openmp-commits mailing list