From 22ac021be44b1e5dc781bcc24339f8c8e189d8e5 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Thu, 15 May 2008 00:52:48 +0000 Subject: [PATCH] mutex (mutex::try_lock): Eat errors. 2008-05-14 Benjamin Kosnik * include/std/mutex (mutex::try_lock): Eat errors. (mutex::unlock): Same. (recursive_mutex::try_lock): Eat errors. (recursive_mutex::unlock): Same. * testsuite/30_threads/mutex/dest/destructor_locked.cc: Add -pthreads, adjust line numbers. * testsuite/30_threads/mutex/native_handle/1.cc: Same. * testsuite/30_threads/mutex/cons/1.cc: Same. * testsuite/30_threads/mutex/try_lock/1.cc: Same. * testsuite/30_threads/mutex/try_lock/2.cc: Same. * testsuite/30_threads/mutex/lock/1.cc: Same. * testsuite/30_threads/mutex/unlock/1.cc: Same. * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: Same. * testsuite/30_threads/recursive_mutex/native_handle/1.cc: Same. * testsuite/30_threads/recursive_mutex/cons/1.cc: Same. From-SVN: r135321 --- libstdc++-v3/ChangeLog | 18 +++++++++ libstdc++-v3/include/std/mutex | 38 +++++-------------- .../testsuite/30_threads/mutex/cons/1.cc | 3 +- .../30_threads/mutex/cons/assign_neg.cc | 2 +- .../30_threads/mutex/cons/copy_neg.cc | 2 +- .../mutex/dest/destructor_locked.cc | 3 +- .../testsuite/30_threads/mutex/lock/1.cc | 9 +++-- .../30_threads/mutex/native_handle/1.cc | 3 +- .../testsuite/30_threads/mutex/try_lock/1.cc | 3 +- .../testsuite/30_threads/mutex/try_lock/2.cc | 5 ++- .../testsuite/30_threads/mutex/unlock/1.cc | 3 +- .../30_threads/recursive_mutex/cons/1.cc | 3 +- .../recursive_mutex/cons/assign_neg.cc | 2 +- .../recursive_mutex/cons/copy_neg.cc | 2 +- .../recursive_mutex/dest/destructor_locked.cc | 3 +- .../recursive_mutex/native_handle/1.cc | 3 +- 16 files changed, 56 insertions(+), 46 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bb4e3d62ec9..2f06c8e92a0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,21 @@ +2008-05-14 Benjamin Kosnik + + * include/std/mutex (mutex::try_lock): Eat errors. + (mutex::unlock): Same. + (recursive_mutex::try_lock): Eat errors. + (recursive_mutex::unlock): Same. + * testsuite/30_threads/mutex/dest/destructor_locked.cc: Add + -pthreads, adjust line numbers. + * testsuite/30_threads/mutex/native_handle/1.cc: Same. + * testsuite/30_threads/mutex/cons/1.cc: Same. + * testsuite/30_threads/mutex/try_lock/1.cc: Same. + * testsuite/30_threads/mutex/try_lock/2.cc: Same. + * testsuite/30_threads/mutex/lock/1.cc: Same. + * testsuite/30_threads/mutex/unlock/1.cc: Same. + * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: Same. + * testsuite/30_threads/recursive_mutex/native_handle/1.cc: Same. + * testsuite/30_threads/recursive_mutex/cons/1.cc: Same. + 2008-05-14 Benjamin Kosnik * include/std/sstream: Adjust braces. diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex index 935b16e57c2..6a75e782416 100644 --- a/libstdc++-v3/include/std/mutex +++ b/libstdc++-v3/include/std/mutex @@ -59,14 +59,13 @@ namespace std mutex() { + // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may) #if defined __GTHREAD_MUTEX_INIT native_handle_type __tmp = __GTHREAD_MUTEX_INIT; _M_mutex = __tmp; #else __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex); #endif - - // EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may) } void @@ -82,23 +81,15 @@ namespace std bool try_lock() { - int __e = __gthread_mutex_trylock(&_M_mutex); - - // EINVAL, EAGAIN, EBUSY - if (__e) - __throw_system_error(__e); - else - return true; + // XXX EINVAL, EAGAIN, EBUSY + return !__gthread_mutex_trylock(&_M_mutex); } void unlock() { - int __e = __gthread_mutex_unlock(&_M_mutex); - - // EINVAL, EAGAIN, EPERM - if (__e) - __throw_system_error(__e); + // XXX EINVAL, EAGAIN, EPERM + __gthread_mutex_unlock(&_M_mutex); } native_handle_type @@ -120,14 +111,13 @@ namespace std recursive_mutex() { + // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may) #if defined __GTHREAD_RECURSIVE_MUTEX_INIT native_handle_type __tmp = __GTHREAD_RECURSIVE_MUTEX_INIT; _M_mutex = __tmp; #else __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex); #endif - - // EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may) } @@ -144,23 +134,15 @@ namespace std bool try_lock() { - int __e = __gthread_recursive_mutex_trylock(&_M_mutex); - - // EINVAL, EAGAIN, EBUSY - if (__e) - __throw_system_error(__e); - else - return true; + // XXX EINVAL, EAGAIN, EBUSY + return !__gthread_recursive_mutex_trylock(&_M_mutex); } void unlock() { - int __e = __gthread_recursive_mutex_unlock(&_M_mutex); - - // EINVAL, EAGAIN, EBUSY - if (__e) - __throw_system_error(__e); + // XXX EINVAL, EAGAIN, EBUSY + __gthread_recursive_mutex_unlock(&_M_mutex); } native_handle_type diff --git a/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc index fca1ffa4740..3ed9b6ebecc 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc index 8a4d413c586..f365d1167c1 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc @@ -39,4 +39,4 @@ void test01() m1 = m2; } // { dg-error "within this context" "" { target *-*-* } 39 } -// { dg-error "is private" "" { target *-*-* } 111 } +// { dg-error "is private" "" { target *-*-* } 102 } diff --git a/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc index 76bc7614391..d0a91025b54 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc @@ -38,4 +38,4 @@ void test01() mutex_type m2(m1); } // { dg-error "within this context" "" { target *-*-* } 38 } -// { dg-error "is private" "" { target *-*-* } 110 } +// { dg-error "is private" "" { target *-*-* } 101 } diff --git a/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc b/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc index 6fad4b5a694..3fe33b2ca34 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc index 3ca6b4af880..c63c606ebc0 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // @@ -41,11 +42,11 @@ int main() mutex_type m; m.lock(); - // Lock already locked mutex, should be ok. - // XXX + // Lock already locked mutex. try { - m.lock(); + // XXX Will block. + // m.lock(); } catch (const std::system_error& e) { diff --git a/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc index 8f3034a291d..d4cd9f7a2e4 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc index 20a3caa39e3..b7380d65717 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc index 617a6525615..7c7845edf5b 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // @@ -45,7 +46,7 @@ int main() try { b = m.try_lock(); - VERIFY( b ); + VERIFY( !b ); } catch (const std::system_error& e) { diff --git a/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc index 1a157290ee7..4c845fa4592 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc index eb76d11a329..1125ea62400 100644 --- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc +++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc index 54877e427e1..ca399742287 100644 --- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc +++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc @@ -39,4 +39,4 @@ void test01() m1 = m2; } // { dg-error "within this context" "" { target *-*-* } 39 } -// { dg-error "is private" "" { target *-*-* } 173 } +// { dg-error "is private" "" { target *-*-* } 155 } diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc index 80a38b3e6eb..7f530c36e38 100644 --- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc +++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc @@ -38,4 +38,4 @@ void test01() mutex_type m2(m1); } // { dg-error "within this context" "" { target *-*-* } 38 } -// { dg-error "is private" "" { target *-*-* } 172 } +// { dg-error "is private" "" { target *-*-* } 154 } diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc index 3586cfa5398..464d1a80035 100644 --- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc +++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc index d28513fc628..fb3be90deb3 100644 --- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc +++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc @@ -1,4 +1,5 @@ -// { dg-options "-std=gnu++0x" } +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread -std=gnu++0x" } // Copyright (C) 2008 Free Software Foundation, Inc. // -- 2.30.2