|
|
1.1 root 1: /* sleep.c - sleep */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <proc.h>
6: #include <q.h>
7: #include <sleep.h>
8:
9: /*------------------------------------------------------------------------
10: * sleep -- delay the calling process n seconds
11: *------------------------------------------------------------------------
12: */
13: SYSCALL sleep(n)
14: int n;
15: {
1.1.1.2 ! root 16: #ifdef DEBUG
! 17: dotrace("sleep", &n, 1);
! 18: #endif
1.1 root 19: if (n<0 || clkruns==0)
20: return(SYSERR);
21: if (n == 0) {
1.1.1.2 ! root 22: disable();
! 23: resched(); /* resched assumes caller is disabled */
! 24: restore();
1.1 root 25: return(OK);
26: }
27: while (n >= 1000) {
28: sleep10(10000);
29: n -= 1000;
30: }
31: if (n > 0)
32: sleep10(10*n);
33: return(OK);
34: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.