Proc refcnting wrappers
[akaros.git] / kern / src / schedule.c
index b6420b8..fe68161 100644 (file)
@@ -32,8 +32,8 @@ void schedule_init(void)
 
 void schedule_proc(struct proc *p)
 {
-       p->env_refcnt++; // TODO (REF) (usually is called while locked)
-       //proc_incref(p, 1); /* up the refcnt since we are storing the reference */
+       /* up the refcnt since we are storing the reference */
+       proc_incref(p, 1);
        spin_lock_irqsave(&runnablelist_lock);
        printd("Scheduling PID: %d\n", p->pid);
        TAILQ_INSERT_TAIL(&proc_runnablelist, p, proc_link);
@@ -44,15 +44,15 @@ void schedule_proc(struct proc *p)
 /* TODO: race here.  it's possible that p was already removed from the
  * list (by schedule()), while proc_destroy is trying to remove it from the
  * list.  schedule()'s proc_run() won't actually run it (since it's DYING), but
- * this code will probably fuck up. */
+ * this code will probably fuck up.  Having TAILQ_REMOVE not hurt will help. */
 void deschedule_proc(struct proc *p)
 {
        spin_lock_irqsave(&runnablelist_lock);
        printd("Descheduling PID: %d\n", p->pid);
        TAILQ_REMOVE(&proc_runnablelist, p, proc_link);
        spin_unlock_irqsave(&runnablelist_lock);
-       p->env_refcnt--; // TODO (REF) (usually is called while locked)
-       //proc_decref(p, 1); /* down the refcnt, since its no longer stored */
+       /* down the refcnt, since its no longer stored */
+       proc_decref(p);
        return;
 }
 
@@ -73,12 +73,9 @@ void schedule(void)
                printd("PID of proc i'm running: %d\n", p->pid);
                /* proc_run will either eat the ref, or we'll decref manually. */
                proc_run(p);
-               proc_decref(p, 1);
+               proc_decref(p);
        } else {
                spin_unlock_irqsave(&runnablelist_lock);
-               printk("No processes to schedule, enjoy the Monitor!\n");
-               while (1)
-                       monitor(NULL);
        }
        return;
 }