[OpenMP] Add memory barrier to solve data race
authorHenry Kao <henry.kao@huawei.com>
Fri, 27 Mar 2020 20:29:05 +0000 (16:29 -0400)
committerBryan Chan <bryanpkc@gmail.com>
Fri, 27 Mar 2020 20:32:28 +0000 (16:32 -0400)
Data race occurs when acquiring lock for critical section
triggering assertion failure. Added barrier to ensure
all memory is commited before checking assertion.

Reviewed By: Hahnfeld

Differential Revision: https://reviews.llvm.org/D76780

openmp/runtime/src/kmp_lock.cpp

index 2cc9e08..8e20c6c 100644 (file)
@@ -1239,6 +1239,9 @@ __kmp_acquire_queuing_lock_timed_template(kmp_queuing_lock_t *lck,
       KMP_MB();
       // ToDo: Use __kmp_wait_sleep or similar when blocktime != inf
       KMP_WAIT(spin_here_p, FALSE, KMP_EQ, lck);
+      // Synchronize writes to both runtime thread structures
+      // and writes in user code.
+      KMP_MB();
 
 #ifdef DEBUG_QUEUING_LOCKS
       TRACE_LOCK(gtid + 1, "acq spin");