summaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2010-01-29 16:59:55 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2010-01-29 16:59:55 +0000
commit742a7b1562e0c792fb303b9c3512d29ee437a850 (patch)
tree04295ecc625cf3eb700770cbad2552ec3a84a2e3 /libstdc++-v3/src
parente882a286d9ae615196afc52d72bed83549c24534 (diff)
downloadgcc-742a7b1562e0c792fb303b9c3512d29ee437a850.tar.gz
2010-01-29 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/condition_variable (enum class cv_status): Add and use it throughout, per N3000. (condition_variable_any::wait<>(_Lock&), wait<>(_Lock&, _Predicate), wait_until<>(_Lock&, const chrono::time_point<>&, _Predicate)): Provide definitions. * src/condition_variable.cc (condition_variable_any::notify_one, condition_variable_any::notify_all): Likewise. * config/abi/pre/gnu.ver: Export. * testsuite/30_threads/condition_variable_any/requirements/ typedefs.cc: New. * testsuite/30_threads/condition_variable_any/requirements/ standard_layout.cc: Likewise. * testsuite/30_threads/condition_variable/members/1.cc: Adjust. * testsuite/30_threads/condition_variable/members/2.cc: Likewise. * testsuite/30_threads/condition_variable/cons/assign_neg.cc: Adjust dg-error line numbers. * testsuite/30_threads/condition_variable/cons/copy_neg.cc: Likewise. * testsuite/30_threads/condition_variable_any/cons/assign_neg.cc: Likewise. * testsuite/30_threads/condition_variable_any/cons/copy_neg.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156358 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/condition_variable.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/libstdc++-v3/src/condition_variable.cc b/libstdc++-v3/src/condition_variable.cc
index 4fb2f179dfd..b4203799253 100644
--- a/libstdc++-v3/src/condition_variable.cc
+++ b/libstdc++-v3/src/condition_variable.cc
@@ -96,6 +96,28 @@ namespace std
{
__gthread_cond_destroy(&_M_cond);
}
+
+ void
+ condition_variable_any::notify_one()
+ {
+ int __e = __gthread_cond_signal(&_M_cond);
+
+ // XXX not in spec
+ // EINVAL
+ if (__e)
+ __throw_system_error(__e);
+ }
+
+ void
+ condition_variable_any::notify_all()
+ {
+ int __e = __gthread_cond_broadcast(&_M_cond);
+
+ // XXX not in spec
+ // EINVAL
+ if (__e)
+ __throw_system_error(__e);
+ }
}
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1