---
sysdeps/htl/pt-rwlock-timedrdlock.c | 9 ++++++++-
sysdeps/htl/pt-rwlock-tryrdlock.c | 9 ++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/sysdeps/htl/pt-rwlock-timedrdlock.c
b/sysdeps/htl/pt-rwlock-timedrdlock.c
index 25b761433a..ecde14c56a 100644
--- a/sysdeps/htl/pt-rwlock-timedrdlock.c
+++ b/sysdeps/htl/pt-rwlock-timedrdlock.c
@@ -51,7 +51,14 @@ __pthread_rwlock_timedrdlock_internal (struct
__pthread_rwlock *rwlock,
/* Just add ourself to number of readers. */
{
assert (rwlock->__readerqueue == 0);
- rwlock->__readers++;
+ unsigned int new__readers = rwlock->__readers + 1;
+ if (new__readers < rwlock->__readers)
+ {
+ /* We would wrap around */
+ __pthread_spin_unlock (&rwlock->__lock);
+ return EAGAIN;
+ }
+ rwlock->__readers = new__readers;
__pthread_spin_unlock (&rwlock->__lock);
return 0;
}
diff --git a/sysdeps/htl/pt-rwlock-tryrdlock.c
b/sysdeps/htl/pt-rwlock-tryrdlock.c
index 6a626c6954..41a3704d61 100644
--- a/sysdeps/htl/pt-rwlock-tryrdlock.c
+++ b/sysdeps/htl/pt-rwlock-tryrdlock.c
@@ -42,7 +42,14 @@ __pthread_rwlock_tryrdlock (struct __pthread_rwlock *rwlock)
if (rwlock->__readers > 0)
{
assert (rwlock->__readerqueue == 0);
- rwlock->__readers++;
+ unsigned int new__readers = rwlock->__readers + 1;
+ if (new__readers < rwlock->__readers)
+ {
+ /* We would wrap around */
+ __pthread_spin_unlock (&rwlock->__lock);
+ return EAGAIN;
+ }
+ rwlock->__readers = new__readers;
__pthread_spin_unlock (&rwlock->__lock);
return 0;
}
--
2.53.0