From a25b832d9a51c33f6aabaffe54292f7caa7aa11f Mon Sep 17 00:00:00 2001 From: davidxu Date: Thu, 6 Jan 2005 02:08:34 +0000 Subject: Return ETIMEDOUT when thread is timeouted since POSIX thread APIs expect ETIMEDOUT not EAGAIN, this simplifies userland code a bit. --- sys/kern/kern_umtx.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c index 3c45ddc..c965a8c 100644 --- a/sys/kern/kern_umtx.c +++ b/sys/kern/kern_umtx.c @@ -282,8 +282,10 @@ umtxq_sleep(struct thread *td, struct umtx_key *key, int priority, const char *wmesg, int timo) { int chain = umtxq_hash(key); - - return (msleep(td, umtxq_mtx(chain), priority, wmesg, timo)); + int error = msleep(td, umtxq_mtx(chain), priority, wmesg, timo); + if (error == EWOULDBLOCK) + error = ETIMEDOUT; + return (error); } static int @@ -538,12 +540,12 @@ do_lock(struct thread *td, struct umtx *umtx, long id, timespecsub(&ts1, &ts2); TIMESPEC_TO_TIMEVAL(&tv, &ts1); if (tv.tv_sec < 0) { - error = EWOULDBLOCK; + error = ETIMEDOUT; break; } timo = tvtohz(&tv); error = _do_lock(td, umtx, id, timo); - if (error != EWOULDBLOCK) + if (error != ETIMEDOUT) break; } } @@ -641,7 +643,7 @@ do_wait(struct thread *td, struct umtx *umtx, long id, struct timespec *abstime) TIMESPEC_TO_TIMEVAL(&tv, &ts1); umtxq_lock(&uq.uq_key); if (tv.tv_sec < 0) { - error = EWOULDBLOCK; + error = ETIMEDOUT; break; } timo = tvtohz(&tv); -- cgit v1.1