[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.




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);
     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);
   // 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