diff --git a/src/sys/kernel/endtask.c b/src/sys/kernel/endtask.c index e3b99b9..6c348a9 100644 --- a/src/sys/kernel/endtask.c +++ b/src/sys/kernel/endtask.c @@ -46,13 +46,16 @@ void endTask(pidType pid) { kTask_t *tmpTask = 0x0; + /* Don't mess with scheduler structures from outside the scheduler! */ + /* Just set status to dead, and let the scheduler clean up itself */ + sched_setStatus(pid,DEAD); - tmpTask = schedFindTask(pid); - if (sched_deleteTask(pid) != 0x0) - kpanic("sched_deleteTask: Failed\n"); + //tmpTask = schedFindTask(pid); + //if (sched_deleteTask(pid) != 0x0) + // kpanic("sched_deleteTask: Failed\n"); //kprintf("Ending Task: (%i:0x%X)\n",tmpTask->id,tmpTask); - sched_addDelTask(tmpTask); - tmpTask->state = DEAD; + //sched_addDelTask(tmpTask); + //tmpTask->state = DEAD; //tmpTask->term->owner = tmpTask->parentPid; @@ -63,6 +66,9 @@ /*** $Log$ + Revision 1.22 2004/09/11 14:26:30 reddawg + Oops why did i disable irq 1 irq 0 is the timer... + Revision 1.21 2004/09/08 22:16:02 reddawg Fixens diff --git a/src/sys/kernel/sched.c b/src/sys/kernel/sched.c index b74f0c8..3bced8f 100644 --- a/src/sys/kernel/sched.c +++ b/src/sys/kernel/sched.c @@ -89,6 +89,12 @@ _current = tmpTask; if (_current->state == FORK) _current->state = READY; + if (_current->state == DEAD) + { + sched_deleteTask(_current->id); + sched_addDelTask(_current->id); + continue; + } break; } @@ -110,7 +116,7 @@ ubixGDT[4].descriptor.baseMed = ((memAddr >> 16) & 0xFF); ubixGDT[4].descriptor.baseHigh = (memAddr >> 24); ubixGDT[4].descriptor.access = '\x89'; - asm("ljmp $0x20,$0\n"); + asm("ljmp $0x20,$0\n"); asm("sti"); } @@ -255,6 +261,9 @@ /*** $Log$ + Revision 1.53 2004/09/11 14:55:25 reddawg + memset newly allocated tasks + Revision 1.52 2004/09/11 12:11:11 reddawg Cleaning up the VFS more changes to follow...