summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-10-18 12:34:07 +0200
committerMiguel <m.i@gmx.at>2018-10-18 12:34:07 +0200
commit205735d022e27d6930e16df42f0c7882196db739 (patch)
tree1ca0dc57c0d4b1d206b0018f7887cf883e696a36
parenta282cb8c921299b54a719452ec2bdaff63d8d3e9 (diff)
fix exit syscall
-rw-r--r--kernel/kernel.h2
-rw-r--r--kernel/ringbuffer.c4
-rw-r--r--kernel/scheduler.c1
-rw-r--r--kernel/syscalls.c1
4 files changed, 5 insertions, 3 deletions
diff --git a/kernel/kernel.h b/kernel/kernel.h
index 263477a..3771b52 100644
--- a/kernel/kernel.h
+++ b/kernel/kernel.h
@@ -32,7 +32,7 @@ REFERENCES
//#define LOG_SYSCALLS // this will lock !!!
#define HIDE_FIXME
-//#define RINGBUFFER_WARN
+#define LOG_RINGBUFFER_WARN
//#define LOG_SCHEDULER
#define FOOLOS_APIC_FREQ 60 // how many apic ticks per second
diff --git a/kernel/ringbuffer.c b/kernel/ringbuffer.c
index e3f5ce8..549bea6 100644
--- a/kernel/ringbuffer.c
+++ b/kernel/ringbuffer.c
@@ -41,7 +41,7 @@ bool ringbuffer_put(ringbuffer* f,uint8_t c)
{
if(ringbuffer_full(f))
{
-#ifdef RINGBUFFER_WARN
+#ifdef LOG_RINGBUFFER_WARN
klog("ringbuffer is full!");
#endif
return false;
@@ -56,7 +56,7 @@ uint8_t ringbuffer_get(ringbuffer* f)
{
if(ringbuffer_empty(f))
{
-#ifdef RINGBUFFER_WARN
+#ifdef LOG_RINGBUFFER_WARN
klog("ringbuffer is empty!");
#endif
return 0; // indistinguishable from byte value 0x00.
diff --git a/kernel/scheduler.c b/kernel/scheduler.c
index 694d81c..9fe4f74 100644
--- a/kernel/scheduler.c
+++ b/kernel/scheduler.c
@@ -568,4 +568,5 @@ void task_exit(uint32_t pid)
compositor_del_window(task_list[cpu][idx].vmem);
vmem_free_space_dir(task_list[cpu][idx].vmem,task_list[cpu][idx].thread);
+
}
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 9fc1a7f..083fbf1 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -489,6 +489,7 @@ uint32_t syscall_exit(int status, uint32_t none1, uint32_t none2,int pid)
}
task_exit(pid);
+ __asm__("int $0x81"); // please schedule us away once and for all
return 0;
}