BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / bb0cb7718204df7c0cbaf87484b1def3c4b2880f / task / task.c

// Related

Nucleus

Barry Per-CPU Scheduler bb0cb77 (3 years, 2 months ago)
diff --git a/task/task.c b/task/task.c
index 69af014..b0268e2 100644
--- a/task/task.c
+++ b/task/task.c
@@ -12,7 +12,6 @@
 #include <nucleus/object.h>
 #include <nucleus/vfs.h>
 
-void init_scheduler(void);
 void timer_handler(struct InterruptFrame *frame);
 void syscall_handler(struct InterruptFrame *frame);
 
@@ -27,17 +26,15 @@ ObjectType taskType = {
 	.delete = task_delete,
 };
 
-Task *currentTask[MAX_CPUS];
-pid_t nextTid = 1;
 extern char stackTop[];
-extern ObjectList *readyQueue[];
 
 /* Create a new Task */
 static void
 task_new(Object *obj)
 {
+	static pid_t tid = 1;
 	Task *task = (void *) obj;
-	task->tid = nextTid++;
+	task->tid = tid++;
 	task->tgid = task->tid;
 	task->priority = NORMAL;
 	task->state = READY;
@@ -48,16 +45,22 @@ static void
 task_delete(Object *obj)
 {
 	Task *task = (void *) obj;
-	put(task->executable);
-	put(task->stack);
+	if (task->executable)
+		put(task->executable);
+	if (task->stack)
+		put(task->stack);
 	if (task->target)
 		put(task->target);
 	if (task->wait)
 		destroy_list(task->wait);
-	put(task->fs);
-	put(task->files);
-	put(task->vm);
-	put(task->signals);
+	if (task->fs)
+		put(task->fs);
+	if (task->files)
+		put(task->files);
+	if (task->vm)
+		put(task->vm);
+	if (task->signals)
+		put(task->signals);
 }
 
 /* Move the stack */
@@ -109,7 +112,7 @@ init_tasking(void)
 	/* Signals namespace */
 	current->signals = new(&signalsType);
 
-	init_scheduler();
+	cpu->scheduler->tasks = 1;
 	register_interrupt(0, timer_handler);
 	register_exception(128, syscall_handler);
 }
@@ -139,7 +142,7 @@ unblock_task(Task *task)
 {
 	lock(task);
 	task->state = READY;
-	add(readyQueue[task->priority], task);
+	enqueue_task(task);
 	unlock(task);
 }