|
@@ -129,13 +129,13 @@ static struct proc * proc_create(const char * name)
|
|
|
return proc;
|
|
|
}
|
|
|
|
|
|
-/*static procs * create_procs(void)
|
|
|
+static procs * create_procs(void)
|
|
|
{
|
|
|
- procs * temp = kmalloc(sizeof procs);
|
|
|
+ procs * temp = kmalloc(sizeof(procs));
|
|
|
if (!(temp)) panic("Could not create process list!\n");
|
|
|
temp->lastpid = PID_MIN - 1;
|
|
|
return temp;
|
|
|
-}*/
|
|
|
+}
|
|
|
|
|
|
struct proc * getChild(struct proc * p, int pid)
|
|
|
{
|
|
@@ -155,6 +155,7 @@ int assignpid(struct proc * proc)
|
|
|
{
|
|
|
proc->pid = i;
|
|
|
processes->lastpid = i;
|
|
|
+ processes->pids[i] = proc;
|
|
|
lock_release(proclock);
|
|
|
return i;
|
|
|
}
|
|
@@ -172,6 +173,7 @@ int assignpid(struct proc * proc)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ lock_release(proclock);
|
|
|
return ENPROC;
|
|
|
}
|
|
|
|
|
@@ -245,7 +247,7 @@ void proc_destroy(struct proc * proc)
|
|
|
spinlock_cleanup(&proc->p_lock);
|
|
|
|
|
|
lock_acquire(proclock);
|
|
|
- processes->pids[proc->pid] = 0; // update available PIDs
|
|
|
+ processes->pids[proc->pid] = NULL; // update available PIDs
|
|
|
lock_release(proclock);
|
|
|
kfree(proc->p_name);
|
|
|
kfree(proc);
|
|
@@ -294,11 +296,15 @@ void proc_bootstrap(void)
|
|
|
}
|
|
|
#endif // UW
|
|
|
|
|
|
+ processes = create_procs();
|
|
|
int processesLen = PID_MAX - PID_MIN + 1;
|
|
|
for (int i = 0; i < processesLen; i++)
|
|
|
{
|
|
|
- processes->pids[i] = 0;
|
|
|
+ processes->pids[i] = NULL;
|
|
|
}
|
|
|
+
|
|
|
+ proclock = lock_create("proclock");
|
|
|
+ if (!(proclock)) panic("Process manager lock could not be created!\n");
|
|
|
}
|
|
|
|
|
|
/*
|