* include/bits/atomic_futex.h [_GLIBCXX_HAVE_LINUX_FUTEX]
(_M_load_and_test_until): Whitespace. (_M_load_and_test): Value-initialize the unused durations. (_M_load_when_equal): Add missing return value. From-SVN: r226174
This commit is contained in:
parent
776280c4a8
commit
fa0ed2b062
2 changed files with 15 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-07-24 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/bits/atomic_futex.h [_GLIBCXX_HAVE_LINUX_FUTEX]
|
||||
(_M_load_and_test_until): Whitespace.
|
||||
(_M_load_and_test): Value-initialize the unused durations.
|
||||
(_M_load_when_equal): Add missing return value.
|
||||
|
||||
2015-07-24 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
|
||||
|
||||
* fragment.am (AM_CPPFLAGS): Add CPPFLAGS.
|
||||
|
|
|
@ -93,15 +93,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
{
|
||||
for (;;)
|
||||
{
|
||||
// Don't bother checking the value again because we expect the caller to
|
||||
// have done it recently.
|
||||
// Don't bother checking the value again because we expect the caller
|
||||
// to have done it recently.
|
||||
// memory_order_relaxed is sufficient because we can rely on just the
|
||||
// modification order (store_notify uses an atomic RMW operation too),
|
||||
// and the futex syscalls synchronize between themselves.
|
||||
_M_data.fetch_or(_Waiter_bit, memory_order_relaxed);
|
||||
bool __ret;
|
||||
__ret = _M_futex_wait_until((unsigned*)(void*)&_M_data,
|
||||
__assumed | _Waiter_bit, __has_timeout, __s, __ns);
|
||||
bool __ret = _M_futex_wait_until((unsigned*)(void*)&_M_data,
|
||||
__assumed | _Waiter_bit,
|
||||
__has_timeout, __s, __ns);
|
||||
// Fetch the current value after waiting (clears _Waiter_bit).
|
||||
__assumed = _M_load(__mo);
|
||||
if (!__ret || ((__operand == __assumed) == __equal))
|
||||
|
@ -119,7 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
bool __equal, memory_order __mo)
|
||||
{
|
||||
return _M_load_and_test_until(__assumed, __operand, __equal, __mo,
|
||||
false, chrono::seconds(0), chrono::nanoseconds(0));
|
||||
false, {}, {});
|
||||
}
|
||||
|
||||
// If a timeout occurs, returns a current value after the timeout;
|
||||
|
@ -146,7 +146,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
_M_load_when_not_equal(unsigned __val, memory_order __mo)
|
||||
{
|
||||
unsigned __i = _M_load(__mo);
|
||||
if ((__i & ~_Waiter_bit) != __val) return;
|
||||
if ((__i & ~_Waiter_bit) != __val)
|
||||
return (__i & ~_Waiter_bit);
|
||||
// TODO Spin-wait first.
|
||||
return _M_load_and_test(__i, __val, false, __mo);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue