diff options
| -rw-r--r-- | kernel/sched.c | 3 | ||||
| -rw-r--r-- | lib/time.c | 9 |
2 files changed, 9 insertions, 3 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 9f955d2..ae2fb38 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -217,6 +217,9 @@ void reschedule(void) { return; } } + + /* if not, then halt the machine */ + __asm__ ("hlt"); } } @@ -1,3 +1,4 @@ +#include <signal.h> #include <time.h> #include <unistd.h> @@ -5,8 +6,10 @@ _syscall0(time_t, time); _syscall1(int, alarm, unsigned int, seconds); -void sleep(time_t t) { - time_t start = time(); +static void sleepsig(int sig) {} - while(time() < start + t); +void sleep(time_t t) { + signal(SIGALRM, &sleepsig); + alarm(t); + pause(); } |
