diff --git a/src/sys/kernel/sched.c b/src/sys/kernel/sched.c index 3123402..9ebe50e 100644 --- a/src/sys/kernel/sched.c +++ b/src/sys/kernel/sched.c @@ -42,6 +42,7 @@ static spinLock_t sched_spinLock = SPIN_LOCK_INITIALIZER; static kTask_t *runList = 0x0; +static kTask_t *delList = 0x0; static uInt32 nextID = -1; kTask_t *_current = 0x0; @@ -49,13 +50,38 @@ static kTask_t *sched_getRunableTask() { kTask_t *tmpTask = 0x0; + kTask_t *delTask = 0x0; tmpTask = _current->next; schedStart: /* Yield the next task from the current prio queue */ for (;tmpTask != 0x0; tmpTask = tmpTask->next) { - if (tmpTask->state > 0x0) { + /* + if (tmpTask->state == DEAD) { + if (tmpTask->next) + tmpTask->next->prev = tmpTask->prev; + if (tmpTask->prev) + tmpTask->prev->next = tmpTask->next; + if (tmpTask == runList) + runList = runList->next; + + delTask = tmpTask->prev; + + if (delList == 0x0) { + delList = tmpTask; + delList->prev = 0x0; + delList->next = 0x0; + } + else { + delList->prev = tmpTask; + tmpTask->next = delList; + delList = tmpTask; + } + tmpTask = delTask; + goto schedStart; + } + else */ if (tmpTask->state > 0x0) { if (tmpTask->state == FORK) tmpTask->state = READY; return(tmpTask); @@ -242,11 +268,9 @@ ************************************************************************/ void sched_yield() { - asm("hlt"); - /* asm("cli"); sched(); - */ + asm("sti"); } /* @@ -277,6 +301,9 @@ /*** $Log$ + Revision 1.33 2004/08/15 16:47:49 reddawg + Fixed + Revision 1.32 2004/08/14 21:56:44 reddawg Added initialized byte to the device system to make it easy to add child devices which use parent hardware.