[NFC][DirectoryWatchedTests] Unlocks mutexes before signaling condition variable
authorPuyan Lotfi <puyan@puyan.org>
Tue, 6 Aug 2019 01:26:46 +0000 (01:26 +0000)
committerPuyan Lotfi <puyan@puyan.org>
Tue, 6 Aug 2019 01:26:46 +0000 (01:26 +0000)
This should not affect actual behavior, but should pessimize the threading less
by avoiding the situation where:

  * mutex is still locked
  * T1 notifies on condition variable
  * T2 wakes to check mutex
  * T2 sees mutex is still locked
  * T2 waits
  * T1 unlocks mutex
  * T2 tries again, acquires mutex.

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

llvm-svn: 367968

clang/unittests/DirectoryWatcher/DirectoryWatcherTest.cpp

index c26ba57..52a6961 100644 (file)
@@ -132,8 +132,10 @@ struct VerifyingConsumer {
     } else {
       ExpectedInitial.erase(It);
     }
-    if (result())
+    if (result()) {
+      L.unlock();
       ResultIsReady.notify_one();
+    }
   }
 
   void consumeNonInitial(DirectoryWatcher::Event E) {
@@ -151,8 +153,10 @@ struct VerifyingConsumer {
     } else {
       ExpectedNonInitial.erase(It);
     }
-    if (result())
+    if (result()) {
+      L.unlock();
       ResultIsReady.notify_one();
+    }
   }
 
   // This method is used by DirectoryWatcher.