X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Ftext%2FbatchAnalysis.c;h=80f11d3c361de18af0114c9cf1d54aca5e13031d;hb=d730b5c8b76588740d11bd12c6e85ed26bebdb4e;hp=1d1ac2348f2234c9d8a49ca7b27c4542ec18fd83;hpb=12c59c3d7642704991efec208aff605b77fa32e5;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/text/batchAnalysis.c b/ltt/branches/poly/lttv/modules/text/batchAnalysis.c index 1d1ac234..80f11d3c 100644 --- a/ltt/branches/poly/lttv/modules/text/batchAnalysis.c +++ b/ltt/branches/poly/lttv/modules/text/batchAnalysis.c @@ -19,6 +19,9 @@ /* This module inserts a hook in the program main loop. This hook processes all the events in the main tracefile. */ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include @@ -28,6 +31,7 @@ #include #include #include +#include #include static LttvTraceset *traceset; @@ -58,6 +62,10 @@ void lttv_trace_option(void *hook_data) static gboolean process_traceset(void *hook_data, void *call_data) { + LttvAttributeValue value_expression, value_filter; + + LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes()); + LttvTracesetStats *tscs; LttvTracesetContext *tc; @@ -75,6 +83,17 @@ static gboolean process_traceset(void *hook_data, void *call_data) lttv_state_add_event_hooks(&tscs->parent); if(a_stats) lttv_stats_add_event_hooks(tscs); + g_assert(lttv_iattribute_find_by_path(attributes, "filter/expression", + LTTV_POINTER, &value_expression)); + + g_assert(lttv_iattribute_find_by_path(attributes, "filter/lttv_filter", + LTTV_POINTER, &value_filter)); + + *(value_filter.v_pointer) = lttv_filter_new(); + g_debug("Filter string: %s",((GString*)*(value_expression.v_pointer))->str); + + 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, //NULL, before_tracefile, after_tracefile, NULL, before_event, after_event); @@ -98,7 +117,6 @@ static gboolean process_traceset(void *hook_data, void *call_data) G_MAXULONG, NULL); - g_info("BatchAnalysis destroy context"); //lttv_traceset_context_remove_hooks(tc, //before_traceset, after_traceset, NULL, before_trace, after_trace, @@ -110,12 +128,16 @@ static gboolean process_traceset(void *hook_data, void *call_data) event_hook, NULL); + g_info("BatchAnalysis destroy context"); + + 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); g_object_unref(tscs); g_info("BatchAnalysis end process traceset"); + return FALSE; } @@ -212,7 +234,8 @@ static void destroy() for(i = 0 ; i < nb ; i++) { trace = lttv_traceset_get(traceset, i); ltt_trace_close(lttv_trace(trace)); - lttv_trace_destroy(trace); + /* This will be done by lttv_traceset_destroy */ + //lttv_trace_destroy(trace); } lttv_traceset_destroy(traceset); @@ -221,4 +244,4 @@ static void destroy() LTTV_MODULE("batchAnalysis", "Batch processing of a trace", \ "Run through a trace calling all the registered hooks", \ - init, destroy, "state", "stats", "option") + init, destroy, "state", "stats", "option","textFilter")