sweep through entire page table to free up intermediate tables
[lunaix-os.git] / lunaix-os / includes / lunaix / process.h
index faca28491a1719c8eeacdc268b2d2e579e7ef95d..86e485e27a599d78c051d1d9879e3f4b8153f87c 100644 (file)
 #define PS_GrDT (PS_TERMNAT | PS_DESTROY)
 #define PS_Rn (PS_RUNNING | PS_CREATED)
 
-#define proc_terminated(proc) (((proc)->state) & PS_GrDT)
-#define proc_hanged(proc) (((proc)->state) & PS_BLOCKED)
-#define proc_runnable(proc) (!(proc)->state || !(((proc)->state) & ~PS_Rn))
+#define proc_terminated(proc) \
+            (!(proc) || ((proc)->state) & PS_GrDT)
+#define proc_hanged(proc) \
+            ((proc)  && ((proc)->state) & PS_BLOCKED)
+#define proc_runnable(proc) \
+            ((proc) && (!(proc)->state || !(((proc)->state) & ~PS_Rn)))
 
 
 #define TH_DETACHED         0b00000001
@@ -367,6 +370,7 @@ spawn_kthread(ptr_t entry) {
     
     assert(th);
     start_thread(th, entry);
+    detach_thread(th);
 }
 
 void