diff options
Diffstat (limited to 'include/gtest/internal')
| -rw-r--r-- | include/gtest/internal/gtest-port.h | 23 | 
1 files changed, 19 insertions, 4 deletions
| diff --git a/include/gtest/internal/gtest-port.h b/include/gtest/internal/gtest-port.h index 3c8463bc..8c96f313 100644 --- a/include/gtest/internal/gtest-port.h +++ b/include/gtest/internal/gtest-port.h @@ -1102,22 +1102,37 @@ inline void SleepMilliseconds(int n) {  // use it in user tests, either directly or indirectly.  class Notification {   public: -  Notification() : notified_(false) {} +  Notification() : notified_(false) { +    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); +  } +  ~Notification() { +    pthread_mutex_destroy(&mutex_); +  }    // Notifies all threads created with this notification to start. Must    // be called from the controller thread. -  void Notify() { notified_ = true; } +  void Notify() { +    pthread_mutex_lock(&mutex_); +    notified_ = true; +    pthread_mutex_unlock(&mutex_); +  }    // Blocks until the controller thread notifies. Must be called from a test    // thread.    void WaitForNotification() { -    while (!notified_) { +    for (;;) { +      pthread_mutex_lock(&mutex_); +      const bool notified = notified_; +      pthread_mutex_unlock(&mutex_); +      if (notified) +        break;        SleepMilliseconds(10);      }    }   private: -  volatile bool notified_; +  pthread_mutex_t mutex_; +  bool notified_;    GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);  }; | 
