physical page list mapping
[lunaix-os.git] / lunaix-os / includes / lunaix / process.h
index faca28491a1719c8eeacdc268b2d2e579e7ef95d..2c8d740ef71d802c64a696bf2c2e7e73848990ef 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 
@@ -375,6 +379,9 @@ exit_thread(void* val);
 void
 thread_release_mem(struct thread* thread);
 
+ptr_t 
+proc_vmroot();
+
 /* 
     ========= Signal =========
 */