Page MenuHomeFreeBSD

D60959.1793502079.diff
No OneTemporary

Authored By
Unknown
Size
1 KB
Referenced Files
None
Subscribers
None

D60959.1793502079.diff

diff --git a/lib/libthr/thread/thr_rwlock.c b/lib/libthr/thread/thr_rwlock.c
--- a/lib/libthr/thread/thr_rwlock.c
+++ b/lib/libthr/thread/thr_rwlock.c
@@ -205,6 +205,9 @@
return (ret);
}
+ if (__predict_false(prwlock->owner == TID(curthread)))
+ return (EDEADLK);
+
if (__predict_false(abstime &&
(abstime->tv_nsec >= 1000000000 || abstime->tv_nsec < 0)))
return (EINVAL);
@@ -276,6 +279,8 @@
ret = _thr_rwlock_tryrdlock(&prwlock->lock, flags);
if (ret == 0)
curthread->rdlock_count++;
+ else if (__predict_false(prwlock->owner == TID(curthread)))
+ ret = EDEADLK;
return (ret);
}
@@ -295,6 +300,8 @@
ret = _thr_rwlock_trywrlock(&prwlock->lock);
if (ret == 0)
prwlock->owner = TID(curthread);
+ else if (__predict_false(prwlock->owner == TID(curthread)))
+ ret = EDEADLK;
return (ret);
}
@@ -319,6 +326,9 @@
return (ret);
}
+ if (__predict_false(prwlock->owner == TID(curthread)))
+ return (EDEADLK);
+
if (__predict_false(abstime &&
(abstime->tv_nsec >= 1000000000 || abstime->tv_nsec < 0)))
return (EINVAL);

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 1, 3:01 AM (12 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41247437
Default Alt Text
D60959.1793502079.diff (1 KB)

Event Timeline