summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/sched.c3
-rw-r--r--lib/time.c9
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");
}
}
diff --git a/lib/time.c b/lib/time.c
index 0f4a251..ab28f71 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -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();
}