LttvHooks *hook_adder = lttv_hooks_new();
lttv_hooks_add(hook_adder, lttv_state_save_hook_add_event_hooks, NULL,
LTTV_PRIO_DEFAULT);
+ lttv_hooks_add(hook_adder, lttv_state_hook_add_event_hooks, NULL,
+ LTTV_PRIO_DEFAULT);
LttvHooks *hook_remover = lttv_hooks_new();
lttv_hooks_add(hook_remover, lttv_state_save_hook_remove_event_hooks,
NULL, LTTV_PRIO_DEFAULT);
+ lttv_hooks_add(hook_remover, lttv_state_hook_remove_event_hooks,
+ NULL, LTTV_PRIO_DEFAULT);
/* Add state computation background hook adder to attributes */
lttvwindowtraces_register_computation_hooks(g_quark_from_string("state"),
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
LttvHooks *hook_adder = lttv_hooks_new();
lttv_hooks_add(hook_adder, lttv_stats_hook_add_event_hooks, NULL,
LTTV_PRIO_DEFAULT);
+ lttv_hooks_add(hook_adder, lttv_state_hook_add_event_hooks, NULL,
+ LTTV_PRIO_DEFAULT);
LttvHooks *hook_remover = lttv_hooks_new();
lttv_hooks_add(hook_remover, lttv_stats_hook_remove_event_hooks,
NULL, LTTV_PRIO_DEFAULT);
+ lttv_hooks_add(hook_remover, lttv_state_hook_remove_event_hooks,
+ NULL, LTTV_PRIO_DEFAULT);
LttvHooks *after_request = lttv_hooks_new();
lttv_hooks_add(after_request, lttv_stats_sum_traceset_hook, NULL,
LTTV_PRIO_DEFAULT);
/* 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;
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));
}
}
void lttvwindowtraces_remove_computation_hooks(LttvAttributeName module_name,
- LttvTracesetContext *tsc)
+ LttvTracesetContext *tsc,
+ LttvHooks *hook_remover)
{
LttvAttribute *g_attribute = lttv_global_attributes();
LttvAttribute *module_attribute;
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));
}
}
{
GSList *iter = *list_in;
+ LttvHooks *hook_adder = lttv_hooks_new();
/* - for each request in list_in */
while(iter != NULL) {
/*- 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);
}
}
/* 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) {
/* - 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 */
}
}
}
+ {
+ /* - 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) */