This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.23-547-geaee348
- From: schwab at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 7 Jul 2016 12:35:08 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.23-547-geaee348
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via eaee348ce71c34faa7a1122529aa9b9807a269c2 (commit)
via d3016ce02c7ba85c1c619771bb1aa349038626cd (commit)
from 318132f4d41a5742c37d37d67529c24d28797d8a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=eaee348ce71c34faa7a1122529aa9b9807a269c2
commit eaee348ce71c34faa7a1122529aa9b9807a269c2
Author: Andreas Schwab <schwab@suse.de>
Date: Thu Jun 16 13:58:02 2016 +0200
Add test case for bug 20263
diff --git a/ChangeLog b/ChangeLog
index 63dfbc5..5e22584 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-07-07 Andreas Schwab <schwab@suse.de>
+
+ [BZ #20263]
+ * nptl/tst-robust10.c: New test.
+ * nptl/Makefile (tests): Add tst-robust10.
+
2016-07-07 Jiyoung Yun <t2wish@gmail.com>
[BZ #20263]
diff --git a/nptl/Makefile b/nptl/Makefile
index 6322107..0d8aade 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -290,7 +290,7 @@ tests = tst-typesizes \
tst-initializers1 $(addprefix tst-initializers1-,\
c89 gnu89 c99 gnu99 c11 gnu11) \
tst-bad-schedattr \
- tst-thread_local1 tst-mutex-errorcheck
+ tst-thread_local1 tst-mutex-errorcheck tst-robust10
xtests = tst-setuid1 tst-setuid1-static tst-setuid2 \
tst-mutexpp1 tst-mutexpp6 tst-mutexpp10
test-srcs = tst-oddstacklimit
diff --git a/nptl/tst-robust10.c b/nptl/tst-robust10.c
new file mode 100644
index 0000000..6d9e502
--- /dev/null
+++ b/nptl/tst-robust10.c
@@ -0,0 +1,110 @@
+/* Test that pthread_mutex_timedlock properly times out.
+ Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+pthread_mutex_t mutex;
+
+static void *
+thr (void *arg)
+{
+ struct timespec abstime;
+ clock_gettime (CLOCK_REALTIME, &abstime);
+ abstime.tv_sec += 1;
+ int ret = pthread_mutex_timedlock (&mutex, &abstime);
+ if (ret == 0)
+ {
+ puts ("mutex_timedlock didn't fail");
+ exit (1);
+ }
+ if (ret != ETIMEDOUT)
+ {
+ printf ("mutex_timedlock failed: %s\n", strerror (ret));
+ exit (1);
+ }
+
+ return 0;
+}
+
+static int
+do_test (void)
+{
+ pthread_t pt;
+ pthread_mutexattr_t ma;
+
+ if (pthread_mutexattr_init (&ma) != 0)
+ {
+ puts ("mutexattr_init failed");
+ return 0;
+ }
+ if (pthread_mutexattr_setrobust_np (&ma, PTHREAD_MUTEX_ROBUST_NP) != 0)
+ {
+ puts ("mutexattr_setrobust failed");
+ return 1;
+ }
+ if (pthread_mutex_init (&mutex, &ma))
+ {
+ puts ("mutex_init failed");
+ return 1;
+ }
+
+ if (pthread_mutexattr_destroy (&ma))
+ {
+ puts ("mutexattr_destroy failed");
+ return 1;
+ }
+
+ if (pthread_mutex_lock (&mutex))
+ {
+ puts ("mutex_lock failed");
+ return 1;
+ }
+
+ if (pthread_create (&pt, NULL, thr, NULL))
+ {
+ puts ("pthread_create failed");
+ return 1;
+ }
+
+ if (pthread_join (pt, NULL))
+ {
+ puts ("pthread_join failed");
+ return 1;
+ }
+
+ if (pthread_mutex_unlock (&mutex))
+ {
+ puts ("mutex_unlock failed");
+ return 1;
+ }
+
+ if (pthread_mutex_destroy (&mutex))
+ {
+ puts ("mutex_destroy failed");
+ return 1;
+ }
+
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=d3016ce02c7ba85c1c619771bb1aa349038626cd
commit d3016ce02c7ba85c1c619771bb1aa349038626cd
Author: Jiyoung Yun <t2wish@gmail.com>
Date: Thu Jun 30 01:15:44 2016 +0900
Fix robust mutex daedlock [BZ #20263]
In Linux/ARM environment, a robust mutex can't catch the timeout result
when it is already owned by other thread and requests to try lock with
a specific time value(pthread_mutex_timedlock). The futex already returns
the ETIMEDOUT result but there is no check the return value and it makes
a deadlock.
* nptl/lowlevelrobustlock.c: Implement ETIMEDOUT logic.
diff --git a/ChangeLog b/ChangeLog
index 690012c..63dfbc5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-07-07 Jiyoung Yun <t2wish@gmail.com>
+
+ [BZ #20263]
+ * nptl/lowlevelrobustlock.c: Implement ETIMEDOUT logic.
+
2016-07-06 Stefan Liebler <stli@linux.vnet.ibm.com>
* sysdeps/s390/linkmap.h (struct link_map_machine):
diff --git a/nptl/lowlevelrobustlock.c b/nptl/lowlevelrobustlock.c
index 3b988b2..efe307e 100644
--- a/nptl/lowlevelrobustlock.c
+++ b/nptl/lowlevelrobustlock.c
@@ -118,8 +118,11 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime,
|| !defined lll_futex_timed_wait_bitset)
lll_futex_timed_wait (futex, newval, &rt, private);
#else
- lll_futex_timed_wait_bitset (futex, newval, abstime,
- FUTEX_CLOCK_REALTIME, private);
+ int err = lll_futex_timed_wait_bitset (futex, newval, abstime,
+ FUTEX_CLOCK_REALTIME, private);
+ /* The futex call timed out. */
+ if (err == -ETIMEDOUT)
+ return -err;
#endif
try:
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 11 +++++
nptl/Makefile | 2 +-
nptl/lowlevelrobustlock.c | 7 ++-
nptl/tst-robust10.c | 110 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 127 insertions(+), 3 deletions(-)
create mode 100644 nptl/tst-robust10.c
hooks/post-receive
--
GNU C Library master sources