+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.
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
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
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)
}
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
-// { 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.
//
m1 = m2;
}
// { dg-error "within this context" "" { target *-*-* } 39 }
-// { dg-error "is private" "" { target *-*-* } 111 }
+// { dg-error "is private" "" { target *-*-* } 102 }
mutex_type m2(m1);
}
// { dg-error "within this context" "" { target *-*-* } 38 }
-// { dg-error "is private" "" { target *-*-* } 110 }
+// { dg-error "is private" "" { target *-*-* } 101 }
-// { 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.
//
-// { 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.
//
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)
{
-// { 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.
//
-// { 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.
//
-// { 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.
//
try
{
b = m.try_lock();
- VERIFY( b );
+ VERIFY( !b );
}
catch (const std::system_error& e)
{
-// { 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.
//
-// { 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.
//
m1 = m2;
}
// { dg-error "within this context" "" { target *-*-* } 39 }
-// { dg-error "is private" "" { target *-*-* } 173 }
+// { dg-error "is private" "" { target *-*-* } 155 }
mutex_type m2(m1);
}
// { dg-error "within this context" "" { target *-*-* } 38 }
-// { dg-error "is private" "" { target *-*-* } 172 }
+// { dg-error "is private" "" { target *-*-* } 154 }
-// { 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.
//
-// { 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.
//