/* we set interrupts to zero here so that we may use rwlocks in * (potentially) an interrupt handler */ void task_block(struct llist *list, task_t *task) { int old = set_int(0); task->blocklist = list; ll_do_insert(list, task->blocknode, (void *)task); tqueue_remove(((cpu_t *)task->cpu)->active_queue, task->activenode); task_pause(task); assert(!set_int(old)); }
void pause_task_with_pid(int pid){ int i = SetInts(0); task_t* task = find_task_with_pid(pid); if(task != (task_t *) -1) task_pause(task); SetInts(i); _reschedule(); }