From 8bf5499521ea2f5a097df3c8273e560653093315 Mon Sep 17 00:00:00 2001 From: compudj Date: Mon, 16 May 2005 15:42:19 +0000 Subject: [PATCH] fix filter : pass global variables via functions : uses lazy binding git-svn-id: http://ltt.polymtl.ca/svn@930 04897980-b3bd-0310-b5e0-8ef037075253 --- .../poly/lttv/modules/text/batchAnalysis.c | 17 +++++++++-------- ltt/branches/poly/lttv/modules/text/textDump.c | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ltt/branches/poly/lttv/modules/text/batchAnalysis.c b/ltt/branches/poly/lttv/modules/text/batchAnalysis.c index bae1abcb..60d1cc53 100644 --- a/ltt/branches/poly/lttv/modules/text/batchAnalysis.c +++ b/ltt/branches/poly/lttv/modules/text/batchAnalysis.c @@ -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); diff --git a/ltt/branches/poly/lttv/modules/text/textDump.c b/ltt/branches/poly/lttv/modules/text/textDump.c index 9502aa0d..11afbed4 100644 --- a/ltt/branches/poly/lttv/modules/text/textDump.c +++ b/ltt/branches/poly/lttv/modules/text/textDump.c @@ -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; } -- 2.34.1