Blame


1 fd04aace 2003-11-23 devnull #include <u.h>
2 fd04aace 2003-11-23 devnull #define NOPLAN9DEFINES
3 c54b8b69 2006-01-27 devnull #include <sys/param.h>
4 fd04aace 2003-11-23 devnull #include <sys/time.h>
5 fd04aace 2003-11-23 devnull #include <sched.h>
6 04084d4e 2005-07-21 devnull #include <libc.h>
7 fd04aace 2003-11-23 devnull
8 c54b8b69 2006-01-27 devnull #if defined(__NetBSD__) || (defined(__OpenBSD__) && OpenBSD <= 200511)
9 c54b8b69 2006-01-27 devnull # define sched_yield() \
10 b058fb68 2006-01-29 devnull do{ struct timespec ts; \
11 b058fb68 2006-01-29 devnull ts.tv_sec = 0; \
12 b058fb68 2006-01-29 devnull ts.tv_nsec = 0; \
13 b058fb68 2006-01-29 devnull nanosleep(&ts, 0); \
14 b058fb68 2006-01-29 devnull }while(0)
15 c54b8b69 2006-01-27 devnull #endif
16 c54b8b69 2006-01-27 devnull
17 fd04aace 2003-11-23 devnull int
18 fd04aace 2003-11-23 devnull p9sleep(long milli)
19 fd04aace 2003-11-23 devnull {
20 fd04aace 2003-11-23 devnull struct timeval tv;
21 fd04aace 2003-11-23 devnull
22 fd04aace 2003-11-23 devnull if(milli == 0){
23 fd04aace 2003-11-23 devnull sched_yield();
24 fd04aace 2003-11-23 devnull return 0;
25 fd04aace 2003-11-23 devnull }
26 fd04aace 2003-11-23 devnull
27 fd04aace 2003-11-23 devnull tv.tv_sec = milli/1000;
28 fd04aace 2003-11-23 devnull tv.tv_usec = (milli%1000)*1000;
29 fd04aace 2003-11-23 devnull return select(0, 0, 0, 0, &tv);
30 fd04aace 2003-11-23 devnull }
31 fd04aace 2003-11-23 devnull
32 fd04aace 2003-11-23 devnull long
33 fd04aace 2003-11-23 devnull p9alarm(ulong milli)
34 fd04aace 2003-11-23 devnull {
35 fd04aace 2003-11-23 devnull struct itimerval itv;
36 fd04aace 2003-11-23 devnull struct itimerval oitv;
37 fd04aace 2003-11-23 devnull
38 fd04aace 2003-11-23 devnull itv.it_interval.tv_sec = 0;
39 fd04aace 2003-11-23 devnull itv.it_interval.tv_usec = 0;
40 fd04aace 2003-11-23 devnull itv.it_value.tv_sec = milli/1000;
41 fd04aace 2003-11-23 devnull itv.it_value.tv_usec = (milli%1000)*1000;
42 fd04aace 2003-11-23 devnull if(setitimer(ITIMER_REAL, &itv, &oitv) < 0)
43 fd04aace 2003-11-23 devnull return -1;
44 fd04aace 2003-11-23 devnull return oitv.it_value.tv_sec*1000+oitv.it_value.tv_usec/1000;
45 fd04aace 2003-11-23 devnull }