/* afs_osi_Wait * Waits for data on ahandle, or ams ms later. ahandle may be null. * Returns 0 if timeout and EINTR if signalled. */ int afs_osi_Wait(afs_int32 ams, struct afs_osi_WaitHandle *ahandle, int aintok) { int code; afs_int32 endTime, tid; AFS_STATCNT(osi_Wait); endTime = osi_Time() + (ams / 1000); if (ahandle) ahandle->proc = (caddr_t) thread_self(); do { AFS_ASSERT_GLOCK(); code = 0; code = afs_osi_TimedSleep(&waitV, ams, aintok); if (code) break; /* if something happened, quit now */ /* if we we're cancelled, quit now */ if (ahandle && (ahandle->proc == (caddr_t) 0)) { /* we've been signalled */ break; } } while (osi_Time() < endTime); return code; }
/* afs_osi_Wait * Waits for data on ahandle, or ams ms later. ahandle may be null. * Returns 0 if timeout and EINTR if signalled. */ int afs_osi_Wait(afs_int32 ams, struct afs_osi_WaitHandle *ahandle, int aintok) { afs_int32 endTime; int code; AFS_STATCNT(osi_Wait); endTime = osi_Time() + (ams / 1000); if (ahandle) ahandle->proc = (caddr_t) current; do { AFS_ASSERT_GLOCK(); code = afs_osi_TimedSleep(&waitV, ams, 1); if (code) break; if (ahandle && (ahandle->proc == (caddr_t) 0)) { /* we've been signalled */ break; } } while (osi_Time() < endTime); return code; }