From: Jiyoung Yun Date: Wed, 29 Jun 2016 16:15:44 +0000 (+0900) Subject: Fix robust mutex daedlock [BZ #20263] X-Git-Tag: upstream/2.24~34 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d3016ce02c7ba85c1c619771bb1aa349038626cd;p=platform%2Fupstream%2Fglibc.git 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 + + [BZ #20263] + * nptl/lowlevelrobustlock.c: Implement ETIMEDOUT logic. + 2016-07-06 Stefan Liebler * 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: