[libstdc++] Add missing _M_try_acquire() to __platform_semaphore
authorThomas Rodgers <rodgert@twrodgers.com>
Wed, 21 Apr 2021 15:15:16 +0000 (08:15 -0700)
committerThomas Rodgers <rodgert@twrodgers.com>
Wed, 21 Apr 2021 15:18:28 +0000 (08:18 -0700)
libstdc++-v3/ChangeLog:
* include/bits/semaphore_base.h: Add missing _M_try_acquire()
member to __platform_wait.

libstdc++-v3/include/bits/semaphore_base.h

index 7e3235d..35469e4 100644 (file)
@@ -86,6 +86,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        }
     }
 
+    _GLIBCXX_ALWAYS_INLINE bool
+    _M_try_acquire() noexcept
+    {
+      for (;;)
+       {
+         auto __err = sem_trywait(&_M_semaphore);
+         if (__err && (errno == EINTR))
+           continue;
+         else if (__err && (errno == EAGAIN))
+           return false;
+         else if (__err)
+           std::terminate();
+         else
+           break;
+       }
+      return true;
+    }
+
     _GLIBCXX_ALWAYS_INLINE void
     _M_release(std::ptrdiff_t __update) noexcept
     {