From 22ac021be44b1e5dc781bcc24339f8c8e189d8e5 Mon Sep 17 00:00:00 2001
From: Benjamin Kosnik <bkoz@redhat.com>
Date: Thu, 15 May 2008 00:52:48 +0000
Subject: [PATCH] mutex (mutex::try_lock): Eat errors.

2008-05-14  Benjamin Kosnik  <bkoz@redhat.com>

	* 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 bb4e3d62ec91..2f06c8e92a04 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,21 @@
+2008-05-14  Benjamin Kosnik  <bkoz@redhat.com>
+
+	* 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  <bkoz@redhat.com>
 
 	* include/std/sstream: Adjust braces.
diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex
index 935b16e57c29..6a75e7824164 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 fca1ffa4740c..3ed9b6ebecc6 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 8a4d413c5869..f365d1167c1c 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 76bc7614391f..d0a91025b54d 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 6fad4b5a6945..3fe33b2ca340 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 3ca6b4af880b..c63c606ebc06 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 8f3034a291dd..d4cd9f7a2e42 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 20a3caa39e3c..b7380d65717d 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 617a65256150..7c7845edf5b6 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 1a157290ee75..4c845fa45921 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 eb76d11a3296..1125ea624001 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 54877e427e19..ca3997422870 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 80a38b3e6eb7..7f530c36e38f 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 3586cfa5398c..464d1a800353 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 d28513fc6282..fb3be90deb3c 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.
 //
-- 
GitLab