Don't destroy current thread's pagedir before activating a different
[pintos-anon] / src / threads / synch.c
index c3b46a8c7f675708cacd2d68d0b35c894480c5f6..08ba8f4b90cff42b698ab89a99f7c19d65ba45f6 100644 (file)
@@ -40,7 +40,7 @@ sema_init (struct semaphore *sema, unsigned value, const char *name)
 void
 sema_down (struct semaphore *sema) 
 {
-  enum if_level old_level;
+  enum intr_level old_level;
 
   ASSERT (sema != NULL);
   ASSERT (!intr_context ());
@@ -51,7 +51,7 @@ sema_down (struct semaphore *sema)
       struct thread_elem te;
       te.thread = thread_current ();
       list_push_back (&sema->waiters, &te.elem);
-      thread_sleep ();
+      thread_block ();
     }
   sema->value--;
   intr_set_level (old_level);
@@ -64,14 +64,14 @@ sema_down (struct semaphore *sema)
 void
 sema_up (struct semaphore *sema) 
 {
-  enum if_level old_level;
+  enum intr_level old_level;
 
   ASSERT (sema != NULL);
 
   old_level = intr_disable ();
   if (!list_empty (&sema->waiters)) 
-    thread_ready (list_entry (list_pop_front (&sema->waiters),
-                              struct thread_elem, elem)->thread);
+    thread_unblock (list_entry (list_pop_front (&sema->waiters),
+                                struct thread_elem, elem)->thread);
   sema->value++;
   intr_set_level (old_level);
 }
@@ -154,7 +154,7 @@ lock_init (struct lock *lock, const char *name)
 void
 lock_acquire (struct lock *lock)
 {
-  enum if_level old_level;
+  enum intr_level old_level;
 
   ASSERT (lock != NULL);
   ASSERT (!intr_context ());
@@ -174,7 +174,7 @@ lock_acquire (struct lock *lock)
 void
 lock_release (struct lock *lock) 
 {
-  enum if_level old_level;
+  enum intr_level old_level;
 
   ASSERT (lock != NULL);
   ASSERT (lock_held_by_current_thread (lock));