X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Flttvwindowtraces.c;h=05c24b7a7f7cfadadf4bb696817725d558cb7b30;hb=88237536a72d70abfc670286eae1cf7c44c1a50b;hp=1ce869990fe2e10ee69ad30f18e4b7773daf913d;hpb=3710295e1cd7cd1d4ec53bd4950f0f078914b7e0;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.c index 1ce86999..05c24b7a 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.c @@ -255,9 +255,10 @@ void lttvwindowtraces_remove_trace(LttvTrace *trace) g_object_unref(tss); lttv_iattribute_remove_by_name(LTTV_IATTRIBUTE(l_attribute), LTTV_COMPUTATION_TRACESET_CONTEXT); - lttv_traceset_destroy(ts); lttv_iattribute_remove_by_name(LTTV_IATTRIBUTE(l_attribute), LTTV_COMPUTATION_TRACESET); + /* Destroy the traceset and the trace also */ + lttv_traceset_destroy(ts); /* finally, remove the global attribute */ lttv_attribute_remove(attribute, i); @@ -548,7 +549,8 @@ void lttvwindowtraces_background_notify_remove(gpointer owner) /* Background processing helper functions */ void lttvwindowtraces_add_computation_hooks(LttvAttributeName module_name, - LttvTracesetContext *tsc) + LttvTracesetContext *tsc, + LttvHooks *hook_adder) { LttvAttribute *g_attribute = lttv_global_attributes(); LttvAttribute *module_attribute; @@ -611,7 +613,9 @@ void lttvwindowtraces_add_computation_hooks(LttvAttributeName module_name, LTTV_HOOK_ADDER, &value); if(type == LTTV_POINTER) { - lttv_hooks_call((LttvHooks*)*(value.v_pointer), (gpointer)tss); + //lttv_hooks_call((LttvHooks*)*(value.v_pointer), (gpointer)tss); + if(hook_adder != NULL) + lttv_hooks_add_list(hook_adder, (LttvHooks*)*(value.v_pointer)); } @@ -626,7 +630,8 @@ void lttvwindowtraces_add_computation_hooks(LttvAttributeName module_name, } void lttvwindowtraces_remove_computation_hooks(LttvAttributeName module_name, - LttvTracesetContext *tsc) + LttvTracesetContext *tsc, + LttvHooks *hook_remover) { LttvAttribute *g_attribute = lttv_global_attributes(); LttvAttribute *module_attribute; @@ -695,7 +700,9 @@ void lttvwindowtraces_remove_computation_hooks(LttvAttributeName module_name, LTTV_HOOK_REMOVER, &value); if(type == LTTV_POINTER) { - lttv_hooks_call((LttvHooks*)*(value.v_pointer), (gpointer)tss); + //lttv_hooks_call((LttvHooks*)*(value.v_pointer), (gpointer)tss); + if(hook_remover != NULL) + lttv_hooks_add_list(hook_remover, (LttvHooks*)*(value.v_pointer)); } } @@ -997,6 +1004,7 @@ gboolean lttvwindowtraces_process_pending_requests(LttvTrace *trace) { GSList *iter = *list_in; + LttvHooks *hook_adder = lttv_hooks_new(); /* - for each request in list_in */ while(iter != NULL) { @@ -1004,16 +1012,19 @@ gboolean lttvwindowtraces_process_pending_requests(LttvTrace *trace) /*- Call before chunk hooks for list_in*/ /*- add hooks to context*/ lttvwindowtraces_add_computation_hooks(bg_req->module_name, - tsc); + tsc, + hook_adder); iter = g_slist_next(iter); } + lttv_hooks_call(hook_adder,tsc); + lttv_hooks_destroy(hook_adder); } } /* 2. call process traceset middle for a chunk */ { /*(assert list_in is not empty! : should not even be called in that case)*/ - LttTime end = { G_MAXUINT, G_MAXUINT }; + LttTime end = ltt_time_infinite; g_assert(g_slist_length(*list_in) != 0); lttv_process_traceset_middle(tsc, end, CHUNK_NUM_EVENTS, NULL); @@ -1024,6 +1035,7 @@ gboolean lttvwindowtraces_process_pending_requests(LttvTrace *trace) /* 3.1 call after_chunk hooks for list_in */ { GSList *iter = *list_in; + LttvHooks *hook_remover = lttv_hooks_new(); /* - for each request in list_in */ while(iter != NULL) { @@ -1031,9 +1043,12 @@ gboolean lttvwindowtraces_process_pending_requests(LttvTrace *trace) /* - Call after chunk hooks for list_in */ /* - remove hooks from context */ lttvwindowtraces_remove_computation_hooks(bg_req->module_name, - tsc); + tsc, + hook_remover); iter = g_slist_next(iter); } + lttv_hooks_call(hook_remover,tsc); + lttv_hooks_destroy(hook_remover); } /* 3.2 for each notify_in */ @@ -1174,6 +1189,11 @@ gboolean lttvwindowtraces_process_pending_requests(LttvTrace *trace) } } } + { + /* - reset the context */ + LTTV_TRACESET_CONTEXT_GET_CLASS(tsc)->fini(tsc); + LTTV_TRACESET_CONTEXT_GET_CLASS(tsc)->init(tsc,ts); + } /* - if list_out is empty */ if(g_slist_length(*list_out) == 0) { /* - return FALSE (scheduler stopped) */