reparent the process if unordered schedule + fork
[lttv.git] / ltt / branches / poly / lttv / lttv / filter.c
index 06c8370c8f8ce960bfcc7f18f1bcc05f947f9993..b7979f3fbdb212a5227268a4ef74b838310711eb 100644 (file)
@@ -75,6 +75,7 @@
 
 #include <lttv/filter.h>
 #include <ltt/trace.h>
+#include <ltt/type.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -1611,7 +1612,6 @@ lttv_filter_tree_parse(
         const LttEvent* event,
         const LttTracefile* tracefile,
         const LttTrace* trace,
-        const LttvProcessState* state,
         const LttvTracefileContext* context
         /*,...*/) 
 {
@@ -1652,12 +1652,22 @@ lttv_filter_tree_parse(
    */
     
   gboolean lresult = FALSE, rresult = FALSE;
+
+  LttvProcessState* state;
+  
+  if(LTTV_IS_TRACESET_STATE(context)) {
+    guint cpu = ltt_tracefile_num(context->tf);
+    LttvTraceState *ts = (LttvTraceState*)context->t_context;
+    state = ts->running_process[cpu];
+  } else {
+    state = NULL;
+  }
   
   /*
    * Parse left branch
    */
   if(t->left == LTTV_TREE_NODE) {
-      lresult = lttv_filter_tree_parse(t->l_child.t,event,tracefile,trace,state,context);
+      lresult = lttv_filter_tree_parse(t->l_child.t,event,tracefile,trace,context);
   }
   else if(t->left == LTTV_TREE_LEAF) {
       lresult = lttv_filter_tree_parse_branch(t->l_child.leaf,event,tracefile,trace,state,context);
@@ -1674,7 +1684,7 @@ lttv_filter_tree_parse(
    * Parse right branch
    */
   if(t->right == LTTV_TREE_NODE) {
-      rresult = lttv_filter_tree_parse(t->r_child.t,event,tracefile,trace,state,context);
+      rresult = lttv_filter_tree_parse(t->r_child.t,event,tracefile,trace,context);
   }
   else if(t->right == LTTV_TREE_LEAF) {
       rresult = lttv_filter_tree_parse_branch(t->r_child.leaf,event,tracefile,trace,state,context);
@@ -1785,9 +1795,11 @@ lttv_filter_tree_parse_branch(
         case LTTV_FILTER_STATE_CPU:
             if(context == NULL) return TRUE;
             else {
-              /* FIXME: not sure of that one */
-              GQuark quark = ((LttvTracefileState*)context)->cpu_name;
-              return se->op((gpointer)&quark,v);
+              /* FIXME: not sure of that one  Mathieu : fixed.*/
+ //             GQuark quark = ((LttvTracefileState*)context)->cpu_name;
+ //                return se->op((gpointer)&quark,v);
+              if(state == NULL) return TRUE;
+              else return se->op((gpointer)&state->cpu,v);
             }
             break;
         case LTTV_FILTER_EVENT_NAME:
This page took 0.030554 seconds and 4 git commands to generate.