correct bug : need EXIT and ZOMBIE states : one for exit event, the other for schedul...
[lttv.git] / ltt / branches / poly / lttv / lttv / state.c
index e96247403559b6455ce010745ecbcc9db9f5500d..20d4184a43c29c01a972bbb57ad0396dd11a5f54 100644 (file)
@@ -41,6 +41,7 @@ LttvProcessStatus
   LTTV_STATE_UNNAMED,
   LTTV_STATE_WAIT_FORK,
   LTTV_STATE_WAIT_CPU,
+  LTTV_STATE_EXIT,
   LTTV_STATE_ZOMBIE,
   LTTV_STATE_WAIT,
   LTTV_STATE_RUN;
@@ -969,7 +970,9 @@ static gboolean schedchange(void *hook_data, void *call_data)
       g_assert(s->process->pid == 0);
     }
 
-    if(s->process->state->s != LTTV_STATE_ZOMBIE) {
+    if(s->process->state->s == LTTV_STATE_EXIT) {
+      s->process->state->s = LTTV_STATE_ZOMBIE;
+    } else {
       if(state_out == 0) s->process->state->s = LTTV_STATE_WAIT_CPU;
       else s->process->state->s = LTTV_STATE_WAIT;
     } /* FIXME : we do not remove process here, because the kernel
@@ -1008,6 +1011,7 @@ static gboolean process_fork(LttvTraceHook *trace_hook, LttvTracefileState *s)
      */
     exit_process(s, zombie_process);
   }
+  g_assert(s->process->pid != child_pid);
   lttv_state_create_process(s, s->process, child_pid);
 
   return FALSE;
@@ -1017,7 +1021,7 @@ static gboolean process_fork(LttvTraceHook *trace_hook, LttvTracefileState *s)
 static gboolean process_exit(LttvTraceHook *trace_hook, LttvTracefileState *s)
 {
   if(s->process != NULL) {
-    s->process->state->s = LTTV_STATE_ZOMBIE;
+    s->process->state->s = LTTV_STATE_EXIT;
   }
   return FALSE;
 }
@@ -1571,6 +1575,7 @@ static void module_init()
   LTTV_STATE_SUBMODE_UNKNOWN = g_quark_from_string("unknown submode");
   LTTV_STATE_SUBMODE_NONE = g_quark_from_string("(no submode)");
   LTTV_STATE_WAIT_CPU = g_quark_from_string("wait for cpu");
+  LTTV_STATE_EXIT = g_quark_from_string("exiting");
   LTTV_STATE_ZOMBIE = g_quark_from_string("zombie");
   LTTV_STATE_WAIT = g_quark_from_string("wait for I/O");
   LTTV_STATE_RUN = g_quark_from_string("running");
This page took 0.023275 seconds and 4 git commands to generate.