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 d3864aba 2006-11-02 devnull #if defined(__NetBSD__) || (defined(__OpenBSD__) && OpenBSD <= 200611)
9 5db07ba9 2006-03-03 devnull #if !defined(sched_yield)
10 c54b8b69 2006-01-27 devnull # define sched_yield() \
11 b058fb68 2006-01-29 devnull do{ struct timespec ts; \
12 b058fb68 2006-01-29 devnull ts.tv_sec = 0; \
13 b058fb68 2006-01-29 devnull ts.tv_nsec = 0; \
14 b058fb68 2006-01-29 devnull nanosleep(&ts, 0); \
15 b058fb68 2006-01-29 devnull }while(0)
16 c54b8b69 2006-01-27 devnull #endif
17 5db07ba9 2006-03-03 devnull #endif
18 c54b8b69 2006-01-27 devnull
19 fd04aace 2003-11-23 devnull int
20 fd04aace 2003-11-23 devnull p9sleep(long milli)
21 fd04aace 2003-11-23 devnull {
22 fd04aace 2003-11-23 devnull struct timeval tv;
23 fd04aace 2003-11-23 devnull
24 fd04aace 2003-11-23 devnull if(milli == 0){
25 fd04aace 2003-11-23 devnull sched_yield();
26 fd04aace 2003-11-23 devnull return 0;
27 fd04aace 2003-11-23 devnull }
28 fd04aace 2003-11-23 devnull
29 fd04aace 2003-11-23 devnull tv.tv_sec = milli/1000;
30 fd04aace 2003-11-23 devnull tv.tv_usec = (milli%1000)*1000;
31 fd04aace 2003-11-23 devnull return select(0, 0, 0, 0, &tv);
32 fd04aace 2003-11-23 devnull }
33 fd04aace 2003-11-23 devnull
34 fd04aace 2003-11-23 devnull long
35 fd04aace 2003-11-23 devnull p9alarm(ulong milli)
36 fd04aace 2003-11-23 devnull {
37 fd04aace 2003-11-23 devnull struct itimerval itv;
38 fd04aace 2003-11-23 devnull struct itimerval oitv;
39 fd04aace 2003-11-23 devnull
40 fd04aace 2003-11-23 devnull itv.it_interval.tv_sec = 0;
41 fd04aace 2003-11-23 devnull itv.it_interval.tv_usec = 0;
42 fd04aace 2003-11-23 devnull itv.it_value.tv_sec = milli/1000;
43 fd04aace 2003-11-23 devnull itv.it_value.tv_usec = (milli%1000)*1000;
44 fd04aace 2003-11-23 devnull if(setitimer(ITIMER_REAL, &itv, &oitv) < 0)
45 fd04aace 2003-11-23 devnull return -1;
46 fd04aace 2003-11-23 devnull return oitv.it_value.tv_sec*1000+oitv.it_value.tv_usec/1000;
47 fd04aace 2003-11-23 devnull }