]> granicus.if.org Git - clang/commitdiff
[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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@367968 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/DirectoryWatcher/DirectoryWatcherTest.cpp

index c26ba57354fc4d73c178061e6f0e5a66428462e2..52a69616057a76b6ff30e5bd526baa69b0bc8952 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.