fix darwin bootstrap errors due to <mutex>.
authorJonathan Wakely <jwakely@redhat.com>
Fri, 4 Sep 2015 16:09:05 +0000 (17:09 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 4 Sep 2015 16:09:05 +0000 (17:09 +0100)
PR libstdc++/65704
* include/std/mutex (recursive_timed_mutex): Fix uses of _Can_lock.

From-SVN: r227495

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/mutex

index 030becbdbe62f720c189e60e756514814cbb6524..ac2dde477afacd9d39816f32a7dc374f942b4731 100644 (file)
@@ -1,4 +1,7 @@
-2015-09-03  Jonathan Wakely  <jwakely@redhat.com>
+2015-09-04  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/65704
+       * include/std/mutex (recursive_timed_mutex): Fix uses of _Can_lock.
 
        PR libstdc++/65704
        * include/Makefile.am: Add <bits/mutex.h>.
index 47141d95477f9e1c30bef4b60c08547cf84f03cf..38950b6e9e875d236cc1e9f5ef30d47e6e589dd5 100644 (file)
@@ -368,9 +368,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     // Predicate type that tests whether the current thread can lock a mutex.
     struct _Can_lock
     {
-      _Can_lock(const recursive_timed_mutex* __mx)
-      : _M_mx(__mx), _M_caller(this_thread::get_id()) { }
-
       // Returns true if the mutex is unlocked or is locked by _M_caller.
       bool
       operator()() const noexcept
@@ -391,7 +388,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     void
     lock()
     {
-      _Can_lock __can_lock{this};
+      auto __id = this_thread::get_id();
+      _Can_lock __can_lock{this, __id};
       unique_lock<mutex> __lk(_M_mut);
       _M_cv.wait(__lk, __can_lock);
       if (_M_count == -1u)
@@ -403,7 +401,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     bool
     try_lock()
     {
-      _Can_lock __can_lock{this};
+      auto __id = this_thread::get_id();
+      _Can_lock __can_lock{this, __id};
       lock_guard<mutex> __lk(_M_mut);
       if (!__can_lock())
        return false;
@@ -418,9 +417,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       bool
       try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
       {
-       _Can_lock __can_lock{this};
+       auto __id = this_thread::get_id();
+       _Can_lock __can_lock{this, __id};
        unique_lock<mutex> __lk(_M_mut);
-       if (!_M_cv.wait_for(__lk, __rtime, __can_lock);
+       if (!_M_cv.wait_for(__lk, __rtime, __can_lock))
          return false;
        if (_M_count == -1u)
          return false;
@@ -433,9 +433,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       bool
       try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
       {
-       _Can_lock __can_lock{this};
+       auto __id = this_thread::get_id();
+       _Can_lock __can_lock{this, __id};
        unique_lock<mutex> __lk(_M_mut);
-       if (!_M_cv.wait_until(__lk, __atime, __can_lock);
+       if (!_M_cv.wait_until(__lk, __atime, __can_lock))
          return false;
        if (_M_count == -1u)
          return false;