summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-10-09 16:21:32 +0200
committerMiguel <m.i@gmx.at>2018-10-09 16:21:32 +0200
commit63e5017d9863d4ed215782e469e8ee2c6ff8473d (patch)
treef12d149ffa34e6a39f4bce4fe9a001e4ca8c6027 /kernel
parenta6a11437a390fb7e95fe995214d82bf5dbfe1eaf (diff)
fix pipers
Diffstat (limited to 'kernel')
-rw-r--r--kernel/interrupts.c2
-rw-r--r--kernel/ringbuffer.c7
-rw-r--r--kernel/scheduler.c2
-rw-r--r--kernel/syscalls.c5
4 files changed, 12 insertions, 4 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index aed1a50..2ab1490 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -80,7 +80,7 @@ uint32_t interrupt_handler(uint32_t esp, uint32_t irq)
{
if(cpu==0)
{
- compositor_wake();
+ compositor_wake2();
scheduler_wake_worker(esp);
}
}
diff --git a/kernel/ringbuffer.c b/kernel/ringbuffer.c
index 3886340..3526f4d 100644
--- a/kernel/ringbuffer.c
+++ b/kernel/ringbuffer.c
@@ -1,5 +1,6 @@
#include "ringbuffer.h"
#include "kmalloc.h"
+#include "log.h"
ringbuffer ringbuffer_init(uint32_t size)
{
@@ -37,7 +38,11 @@ bool ringbuffer_has(ringbuffer* f)
bool ringbuffer_put(ringbuffer* f,uint8_t c)
{
- if(ringbuffer_full(f))return false;
+ if(ringbuffer_full(f))
+ {
+ klog("ringbuffer is full!");
+ return false;
+ }
f->data[f->back]=c;
f->back--;
diff --git a/kernel/scheduler.c b/kernel/scheduler.c
index 12c4ffd..bddd705 100644
--- a/kernel/scheduler.c
+++ b/kernel/scheduler.c
@@ -346,7 +346,7 @@ void task_syscall_worker()
wake_mouse|=mouse_worker();
//x86_sti();
- //if(wake_mouse)
+ if(wake_mouse)compositor_wake();
compositor_swap_buffers();
if(wake)scheduler_wake_all();
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 8ff6241..d579dc3 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -198,6 +198,7 @@ int syscall_write(int file, char *buf, int len,uint32_t pid)
if(!open_fd[pid][file])kpanic("writing to closed file descriptor");
for(int i=0;i<len;i++)
{
+ if(!fd_can_write(&fds[pid][file]))return i;
fd_write(&fds[pid][file],buf[i]);
}
return len;
@@ -432,7 +433,7 @@ uint32_t syscall_dup2(uint32_t oldfd,int newfd, int none2, uint32_t pid)
}
uint32_t syscall_gui_rect(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
{
- compositor_swap_buffers();
+ compositor_wake();
return 1;
}
uint32_t syscall_gui_win(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
@@ -449,6 +450,8 @@ uint32_t syscall_generic_test(uint32_t nr,uint32_t p1, uint32_t p2, uint32_t p3,
return !task_runs(p1);
case SYSCALL_READ :
return fd_has(&fds[pid][p1])||fd_eof(&fds[pid][p1]);
+ case SYSCALL_WRITE :
+ return fd_can_write(&fds[pid][p1]);
}
return 1;//other syscalls never block for now.