fix filter : pass global variables via functions : uses lazy binding
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Mon, 16 May 2005 15:42:19 +0000 (15:42 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Mon, 16 May 2005 15:42:19 +0000 (15:42 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@930 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/modules/text/batchAnalysis.c
ltt/branches/poly/lttv/modules/text/textDump.c

index bae1abcb5ec36fc9d80d89b7a93bd21c28899f4b..60d1cc530ebb2a06475258eefee94b461949b2f6 100644 (file)
@@ -47,8 +47,6 @@ static char *a_trace;
 
 static gboolean a_stats;
 
-LttvFilter *a_lttv_filter;
-
 void lttv_trace_option(void *hook_data)
 { 
   LttTrace *trace;
@@ -61,7 +59,7 @@ void lttv_trace_option(void *hook_data)
 
 static gboolean process_traceset(void *hook_data, void *call_data)
 {
-  LttvAttributeValue value;
+  LttvAttributeValue value_expression, value_filter;
 
   LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
 
@@ -83,12 +81,15 @@ static gboolean process_traceset(void *hook_data, void *call_data)
   if(a_stats) lttv_stats_add_event_hooks(tscs);
 
   g_assert(lttv_iattribute_find_by_path(attributes, "filter/expression",
-      LTTV_POINTER, &value));
+      LTTV_POINTER, &value_expression));
+
+  g_assert(lttv_iattribute_find_by_path(attributes, "filter/lttv_filter",
+      LTTV_POINTER, &value_filter));
 
-  a_lttv_filter = lttv_filter_new();
-  g_debug("Filter string: %s",((GString*)*(value.v_pointer))->str);
+  *(value_filter.v_pointer) = lttv_filter_new();
+  g_debug("Filter string: %s",((GString*)*(value_expression.v_pointer))->str);
   
-  g_assert(lttv_filter_append_expression(a_lttv_filter,((GString*)*(value.v_pointer))->str));
+  g_assert(lttv_filter_append_expression(*(value_filter.v_pointer),((GString*)*(value_expression.v_pointer))->str));
   
   //lttv_traceset_context_add_hooks(tc,
   //before_traceset, after_traceset, NULL, before_trace, after_trace,
@@ -125,7 +126,7 @@ static gboolean process_traceset(void *hook_data, void *call_data)
                             event_hook,
                             NULL);
 
-  lttv_filter_destroy(a_lttv_filter);
+  lttv_filter_destroy(*(value_filter.v_pointer));
   lttv_state_remove_event_hooks(&tscs->parent);
   if(a_stats) lttv_stats_remove_event_hooks(tscs);
   lttv_context_fini(tc);
index 9502aa0d696da0f8d49dc2dfadcd0158160d25b1..11afbed4ccf2aecc711f819aa9e2c029d0c6fb46 100644 (file)
@@ -50,8 +50,6 @@ static LttvHooks
   *before_trace,
   *event_hook;
 
-extern LttvFilter *a_lttv_filter;
-
 void print_field(LttEvent *e, LttField *f, GString *s, gboolean field_names) {
 
   LttType *type;
@@ -329,18 +327,29 @@ static gboolean write_trace_header(void *hook_data, void *call_data)
 
 static int write_event_content(void *hook_data, void *call_data)
 {
+  LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
+  
   LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
 
   LttvTracefileState *tfs = (LttvTracefileState *)call_data;
 
   LttEvent *e;
 
+  LttvAttributeValue value_filter;
+
+  LttvFilter *filter;
+
   e = tfc->e;
 
+
+  g_assert(lttv_iattribute_find_by_path(attributes, "filter/lttv_filter",
+      LTTV_POINTER, &value_filter));
+  filter = (LttvFilter*)*(value_filter.v_pointer);
+
   /*
    * call to the filter if available
    */
-  if(!lttv_filter_tree_parse(a_lttv_filter->head,e,tfc->t_context->t,tfc->tf,tfs->process,tfc)) {
+  if(!lttv_filter_tree_parse(filter->head,e,tfc->tf,tfc->t_context->t,tfs->process,tfc)) {
       return FALSE;
   }
   
This page took 0.027455 seconds and 4 git commands to generate.