diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/interrupts.c | 2 | ||||
| -rw-r--r-- | kernel/ringbuffer.c | 7 | ||||
| -rw-r--r-- | kernel/scheduler.c | 2 | ||||
| -rw-r--r-- | kernel/syscalls.c | 5 |
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. |
