From a02b596580d95176d3699faac777d848aae822ed Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Sun, 7 Aug 2011 10:20:46 +0200 Subject: [PATCH] - stdin blocks itself util kb has got the input message --- arch/x86/kernel/kb.c | 4 ++-- drivers/stdin/stdin.c | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/arch/x86/kernel/kb.c b/arch/x86/kernel/kb.c index 7b02bafe..9499d9d8 100644 --- a/arch/x86/kernel/kb.c +++ b/arch/x86/kernel/kb.c @@ -33,7 +33,7 @@ void kb_flush() { kb_buffer.buffer = NULL; kb_buffer.size = 0; kb_buffer.maxsize = 0; - //kb_buffer.tid = 0; + kb_buffer.tid = 0; return; } @@ -121,7 +121,7 @@ static void keyboard_handler(struct state *r) kb_buffer.size++; } if (scancode == 28 || scancode == 15 || kb_buffer.size >= kb_buffer.maxsize) { - //wakeup_task(kb_buffer.tid); + wakeup_task(kb_buffer.tid); reschedule(); } } diff --git a/drivers/stdin/stdin.c b/drivers/stdin/stdin.c index 07d75ebf..c657e9fb 100644 --- a/drivers/stdin/stdin.c +++ b/drivers/stdin/stdin.c @@ -34,11 +34,10 @@ static ssize_t stdin_read(fildes_t* file, uint8_t* buffer, size_t size) kb_buffer.buffer = kmalloc(size * sizeof(char)); kb_buffer.maxsize = size; kb_buffer.size = 0; - //kb_buffer.tid = per_core(current_task)->id; - while(!kb_buffer.size) { - reschedule(); - size = kb_buffer.size; - } + kb_buffer.tid = per_core(current_task)->id; + per_core(current_task)->status = TASK_BLOCKED; + reschedule(); + size = kb_buffer.size; memcpy(buffer, kb_buffer.buffer, size);