diff --git a/src/sys/include/ubixos/sched.h b/src/sys/include/ubixos/sched.h index 5962d14..1ae5286 100644 --- a/src/sys/include/ubixos/sched.h +++ b/src/sys/include/ubixos/sched.h @@ -85,7 +85,10 @@ #define MAXPRIOLEVELS 11 int sched_init(); +int sched_setStatus(pidType,tState); void sched(); + + void schedYield(); void schedEndTask(pidType pid); kTask_t *schedNewTask(); @@ -103,6 +106,9 @@ /*** $Log$ + Revision 1.11 2004/07/19 02:08:27 reddawg + Cleaned out the rest of debuging code also temporarily disabled the ip stack to improve boot time + Revision 1.10 2004/07/18 05:24:15 reddawg Fixens diff --git a/src/sys/kernel/sched.c b/src/sys/kernel/sched.c index e57e3d1..3d89ffd 100644 --- a/src/sys/kernel/sched.c +++ b/src/sys/kernel/sched.c @@ -159,6 +159,10 @@ _current = tmpTask; break; } + else if (tmpTask->state == DEAD) { + schedDeleteTask(tmpTask->id); + goto schedStart; + } } /* Finished all the tasks, restarting the list */ @@ -240,24 +244,21 @@ int schedDeleteTask(uInt32 id) { - kTask_t *tmpTask = 0x0; + kTask_t *tmpTask = 0x0; - spinLock(&schedTaskSpinLock); - /* Checking each task from the prio queue */ - for (tmpTask = taskList; tmpTask; tmpTask = tmpTask->next) { - if (tmpTask->id == id) { - tmpTask->prev->next = tmpTask->next; - tmpTask->next->prev = tmpTask->prev; - if (_current == tmpTask) { - _current == tmpTask->next; - break; - } - } - } - kfree(tmpTask->oInfo.cwd); - kfree(tmpTask); - spinUnlock(&schedTaskSpinLock); - return(0x0); + /* Checking each task from the prio queue */ + for (tmpTask = taskList; tmpTask; tmpTask = tmpTask->next) { + if (tmpTask->id == id) { + if (_current == tmpTask) + kpanic("you can not delete yourself!!!\n"); + tmpTask->prev->next = tmpTask->next; + tmpTask->next->prev = tmpTask->prev; + break; + } + } + kfree(tmpTask->oInfo.cwd); + kfree(tmpTask); + return(0x0); } @@ -308,8 +309,28 @@ sched(); } +/************************************************************************ + +Function: int sched_setStatus(pidType pid,tState state) + +Description: Change the tasks status + +Notes: + +************************************************************************/ +int sched_setStatus(pidType pid,tState state) { + kTask_t *tmpTask = schedFindTask(pid); + if (tmpTask == 0x0) + return(0x1); + tmpTask->state = state; + return(0x0); + } + /*** $Log$ + Revision 1.14 2004/07/19 01:56:31 reddawg + schedDeleteTask: I am pondering the possability that this could not finish in a quantum.... + Revision 1.13 2004/07/18 05:24:15 reddawg Fixens diff --git a/src/sys/kernel/syscall.c b/src/sys/kernel/syscall.c index 193bbdc..5026414 100644 --- a/src/sys/kernel/syscall.c +++ b/src/sys/kernel/syscall.c @@ -126,7 +126,6 @@ void sysExit(int status) { endTask(_current->id); - sched(); } void sysCheckPid(int pid,int *ptr) { @@ -210,6 +209,9 @@ /*** $Log$ + Revision 1.16 2004/07/05 23:06:32 reddawg + Fixens + Revision 1.15 2004/06/26 01:24:44 reddawg Fixens