void sleep_on(struct wait_queue *queue, struct task_struct *task) { assert(queue && task); //assert(task->pid != 0); if (!task->pid) return; wait_queue_add(queue,task); task->task_status = TASK_UNINTERRUPTIBLE; schedule_delete_task(task); schedule(); }
int exit(struct task_struct *task) { assert(task); if (task == curtask) lcr3(pgd2p(kpgd)); schedule_delete_task(task); exit_notify(task); exit_mm(task->mm); exit_files(task); exit_task(task); if (task == curtask) { curtask = NULL; schedule(); } return 0; }