-/*
- * Sleep on chan at pri for at most a specified amount of time.
- * Return (TS_OK,TS_TIME,TS_SIG) on (normal,timeout,signal) condition.
- */
-tsleep(chan, pri, tvp)
- caddr_t chan;
- int pri;
- struct timeval *tvp;
-{
- register struct proc *p = u.u_procp;
- int s, rval;
-
- s = spl7();
- if (timercmp(tvp, &p->p_realtimer.it_value, >)) {
- /* alarm will occur first! */
- sleep(chan, pri);
- rval = TS_OK; /* almost NOTREACHED modulo fuzz */
- } else {
- label_t lqsav;
-
- bcopy((caddr_t)u.u_qsav, (caddr_t)lqsav, sizeof (label_t));
- p->p_seltimer = *tvp;
- if (setjmp(u.u_qsav))
- rval = TS_SIG;
- else {
- sleep(chan, pri);
- rval = TS_OK;
- }
- timerclear(&p->p_seltimer);
- bcopy((caddr_t)lqsav, (caddr_t)u.u_qsav, sizeof (label_t));
- }
- splx(s);
- return (rval);
-}
-