diff --git a/kernel/tasks.c b/kernel/tasks.c index 60c8e412..7a8e61d9 100644 --- a/kernel/tasks.c +++ b/kernel/tasks.c @@ -162,6 +162,7 @@ static void wakeup_blocked_tasks(int result) /* wake up blocked tasks */ for(i=0; ioutbox[i]) { + //kprintf("Wake up blocked task %d\n", i); mailbox_wait_msg_post(curr_task->outbox[i], tmp); curr_task->outbox[i] = NULL; } @@ -325,7 +326,7 @@ create_task_out: int sys_fork(void) { int ret = -ENOMEM; - unsigned int i, core_id, fd_i; + unsigned int i, core_id; task_t* parent_task = per_core(current_task); vma_t** child; vma_t* parent; @@ -373,12 +374,7 @@ int sys_fork(void) /* init fildes_table */ task_table[i].fildes_table = kmalloc(sizeof(fildes_t)*NR_OPEN); - memset(task_table[i].fildes_table, 0x00, sizeof(fildes_t)*NR_OPEN); - - // copy filedescriptors - for (fd_i = 0; fd_i < NR_OPEN; fd_i++) { - task_table[i].fildes_table[fd_i].node = per_core(current_task)->fildes_table[fd_i].node; - } + memcpy(task_table[i].fildes_table, parent_task->fildes_table, sizeof(fildes_t)*NR_OPEN); mailbox_wait_msg_init(&task_table[i].inbox); memset(task_table[i].outbox, 0x00, sizeof(mailbox_wait_msg_t*)*MAX_TASKS);