From 3bafb4363535d53c1c7b954b636305723b9cd284 Mon Sep 17 00:00:00 2001 From: compudj Date: Wed, 4 Aug 2004 03:37:34 +0000 Subject: [PATCH] no more after_request on remove_all git-svn-id: http://ltt.polymtl.ca/svn@660 04897980-b3bd-0310-b5e0-8ef037075253 --- .../gui/lttvwindow/lttvwindow/callbacks.c | 834 +++++++++--------- .../gui/lttvwindow/lttvwindow/lttvwindow.c | 9 +- 2 files changed, 423 insertions(+), 420 deletions(-) diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index faa2c28b..128b4202 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -745,259 +745,190 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) */ /* A. Servicing loop */ //while( (g_slist_length(list_in) != 0 || g_slist_length(list_out) != 0)) { + if((g_slist_length(list_in) != 0 || g_slist_length(list_out) != 0)) { + /* Servicing */ + /* 1. If list_in is empty (need a seek) */ + if( g_slist_length(list_in) == 0 ) { - /* Servicing */ - /* 1. If list_in is empty (need a seek) */ - if( g_slist_length(list_in) == 0 ) { - - /* list in is empty, need a seek */ - { - /* 1.1 Add requests to list_in */ - GSList *ltime = NULL; - GSList *lpos = NULL; - GSList *iter = NULL; - - /* 1.1.1 Find all time requests with the lowest start time in list_out - * (ltime) - */ - if(g_slist_length(list_out) > 0) - ltime = g_slist_append(ltime, g_slist_nth_data(list_out, 0)); - for(iter=g_slist_nth(list_out,1);iter!=NULL;iter=g_slist_next(iter)) { - /* Find all time requests with the lowest start time in list_out */ - guint index_ltime = g_array_index(ltime, guint, 0); - EventsRequest *event_request_ltime = (EventsRequest*)g_slist_nth_data(ltime, 0); - EventsRequest *event_request_list_out = (EventsRequest*)iter->data; - - int comp; - comp = ltt_time_compare(event_request_ltime->start_time, - event_request_list_out->start_time); - if(comp == 0) - ltime = g_slist_append(ltime, event_request_list_out); - else if(comp > 0) { - /* Remove all elements from ltime, and add current */ - while(ltime != NULL) - ltime = g_slist_delete_link(ltime, g_slist_nth(ltime, 0)); - ltime = g_slist_append(ltime, event_request_list_out); - } - } - - /* 1.1.2 Find all position requests with the lowest position in list_out - * (lpos) - */ - if(g_slist_length(list_out) > 0) - lpos = g_slist_append(lpos, g_slist_nth_data(list_out, 0)); - for(iter=g_slist_nth(list_out,1);iter!=NULL;iter=g_slist_next(iter)) { - /* Find all position requests with the lowest position in list_out */ - EventsRequest *event_request_lpos = (EventsRequest*)g_slist_nth_data(lpos, 0); - EventsRequest *event_request_list_out = (EventsRequest*)iter->data; - - int comp; - if(event_request_lpos->start_position != NULL - && event_request_list_out->start_position != NULL) - { - comp = lttv_traceset_context_pos_pos_compare - (event_request_lpos->start_position, - event_request_list_out->start_position); - } else { - comp = -1; - } - if(comp == 0) - lpos = g_slist_append(lpos, event_request_list_out); - else if(comp > 0) { - /* Remove all elements from lpos, and add current */ - while(lpos != NULL) - lpos = g_slist_delete_link(lpos, g_slist_nth(lpos, 0)); - lpos = g_slist_append(lpos, event_request_list_out); - } - } - + /* list in is empty, need a seek */ { - EventsRequest *event_request_lpos = (EventsRequest*)g_slist_nth_data(lpos, 0); - EventsRequest *event_request_ltime = (EventsRequest*)g_slist_nth_data(ltime, 0); - LttTime lpos_start_time; + /* 1.1 Add requests to list_in */ + GSList *ltime = NULL; + GSList *lpos = NULL; + GSList *iter = NULL; - if(event_request_lpos != NULL - && event_request_lpos->start_position != NULL) { - lpos_start_time = lttv_traceset_context_position_get_time( - event_request_lpos->start_position); + /* 1.1.1 Find all time requests with the lowest start time in list_out + * (ltime) + */ + if(g_slist_length(list_out) > 0) + ltime = g_slist_append(ltime, g_slist_nth_data(list_out, 0)); + for(iter=g_slist_nth(list_out,1);iter!=NULL;iter=g_slist_next(iter)) { + /* Find all time requests with the lowest start time in list_out */ + guint index_ltime = g_array_index(ltime, guint, 0); + EventsRequest *event_request_ltime = (EventsRequest*)g_slist_nth_data(ltime, 0); + EventsRequest *event_request_list_out = (EventsRequest*)iter->data; + + int comp; + comp = ltt_time_compare(event_request_ltime->start_time, + event_request_list_out->start_time); + if(comp == 0) + ltime = g_slist_append(ltime, event_request_list_out); + else if(comp > 0) { + /* Remove all elements from ltime, and add current */ + while(ltime != NULL) + ltime = g_slist_delete_link(ltime, g_slist_nth(ltime, 0)); + ltime = g_slist_append(ltime, event_request_list_out); + } } - /* 1.1.3 If lpos.start time < ltime */ - if(event_request_lpos != NULL - && event_request_lpos->start_position != NULL - && ltt_time_compare(lpos_start_time, - event_request_ltime->start_time)<0) { - /* Add lpos to list_in, remove them from list_out */ - for(iter=lpos;iter!=NULL;iter=g_slist_next(iter)) { - /* Add to list_in */ - EventsRequest *event_request_lpos = - (EventsRequest*)iter->data; - - list_in = g_slist_append(list_in, event_request_lpos); - /* Remove from list_out */ - list_out = g_slist_remove(list_out, event_request_lpos); + /* 1.1.2 Find all position requests with the lowest position in list_out + * (lpos) + */ + if(g_slist_length(list_out) > 0) + lpos = g_slist_append(lpos, g_slist_nth_data(list_out, 0)); + for(iter=g_slist_nth(list_out,1);iter!=NULL;iter=g_slist_next(iter)) { + /* Find all position requests with the lowest position in list_out */ + EventsRequest *event_request_lpos = (EventsRequest*)g_slist_nth_data(lpos, 0); + EventsRequest *event_request_list_out = (EventsRequest*)iter->data; + + int comp; + if(event_request_lpos->start_position != NULL + && event_request_list_out->start_position != NULL) + { + comp = lttv_traceset_context_pos_pos_compare + (event_request_lpos->start_position, + event_request_list_out->start_position); + } else { + comp = -1; } - } else { - /* 1.1.4 (lpos.start time >= ltime) */ - /* Add ltime to list_in, remove them from list_out */ - - for(iter=ltime;iter!=NULL;iter=g_slist_next(iter)) { - /* Add to list_in */ - EventsRequest *event_request_ltime = - (EventsRequest*)iter->data; - - list_in = g_slist_append(list_in, event_request_ltime); - /* Remove from list_out */ - list_out = g_slist_remove(list_out, event_request_ltime); + if(comp == 0) + lpos = g_slist_append(lpos, event_request_list_out); + else if(comp > 0) { + /* Remove all elements from lpos, and add current */ + while(lpos != NULL) + lpos = g_slist_delete_link(lpos, g_slist_nth(lpos, 0)); + lpos = g_slist_append(lpos, event_request_list_out); } } - } - g_slist_free(lpos); - g_slist_free(ltime); - } - - /* 1.2 Seek */ - { - tfc = lttv_traceset_context_get_current_tfc(tsc); - g_assert(g_slist_length(list_in)>0); - EventsRequest *events_request = g_slist_nth_data(list_in, 0); - guint seek_count; - - /* 1.2.1 If first request in list_in is a time request */ - if(events_request->start_position == NULL) { - /* - If first req in list_in start time != current time */ - if(tfc == NULL || ltt_time_compare(events_request->start_time, - tfc->timestamp) != 0) - /* - Seek to that time */ - g_debug("SEEK TIME : %lu, %lu", events_request->start_time.tv_sec, - events_request->start_time.tv_nsec); - //lttv_process_traceset_seek_time(tsc, events_request->start_time); - lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc), - events_request->start_time); - - /* Process the traceset with only state hooks */ - seek_count = - lttv_process_traceset_middle(tsc, - events_request->start_time, - G_MAXUINT, NULL); - - - } else { - LttTime pos_time; - /* Else, the first request in list_in is a position request */ - /* If first req in list_in pos != current pos */ - g_assert(events_request->start_position != NULL); - g_debug("SEEK POS time : %lu, %lu", - lttv_traceset_context_position_get_time( - events_request->start_position).tv_sec, - lttv_traceset_context_position_get_time( - events_request->start_position).tv_nsec); - - g_debug("SEEK POS context time : %lu, %lu", - lttv_traceset_context_get_current_tfc(tsc)->timestamp.tv_sec, - lttv_traceset_context_get_current_tfc(tsc)->timestamp.tv_nsec); - g_assert(events_request->start_position != NULL); - if(lttv_traceset_context_ctx_pos_compare(tsc, - events_request->start_position) != 0) { - /* 1.2.2.1 Seek to that position */ - g_debug("SEEK POSITION"); - //lttv_process_traceset_seek_position(tsc, events_request->start_position); - pos_time = lttv_traceset_context_position_get_time( - events_request->start_position); + + { + EventsRequest *event_request_lpos = (EventsRequest*)g_slist_nth_data(lpos, 0); + EventsRequest *event_request_ltime = (EventsRequest*)g_slist_nth_data(ltime, 0); + LttTime lpos_start_time; - lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc), - pos_time); - - /* Process the traceset with only state hooks */ - seek_count = - lttv_process_traceset_middle(tsc, - ltt_time_infinite, - G_MAXUINT, - events_request->start_position); - g_assert(lttv_traceset_context_ctx_pos_compare(tsc, - events_request->start_position) == 0); - - + if(event_request_lpos != NULL + && event_request_lpos->start_position != NULL) { + lpos_start_time = lttv_traceset_context_position_get_time( + event_request_lpos->start_position); + } + + /* 1.1.3 If lpos.start time < ltime */ + if(event_request_lpos != NULL + && event_request_lpos->start_position != NULL + && ltt_time_compare(lpos_start_time, + event_request_ltime->start_time)<0) { + /* Add lpos to list_in, remove them from list_out */ + for(iter=lpos;iter!=NULL;iter=g_slist_next(iter)) { + /* Add to list_in */ + EventsRequest *event_request_lpos = + (EventsRequest*)iter->data; + + list_in = g_slist_append(list_in, event_request_lpos); + /* Remove from list_out */ + list_out = g_slist_remove(list_out, event_request_lpos); + } + } else { + /* 1.1.4 (lpos.start time >= ltime) */ + /* Add ltime to list_in, remove them from list_out */ + + for(iter=ltime;iter!=NULL;iter=g_slist_next(iter)) { + /* Add to list_in */ + EventsRequest *event_request_ltime = + (EventsRequest*)iter->data; + + list_in = g_slist_append(list_in, event_request_ltime); + /* Remove from list_out */ + list_out = g_slist_remove(list_out, event_request_ltime); + } + } } + g_slist_free(lpos); + g_slist_free(ltime); } - } - /* 1.3 Add hooks and call before request for all list_in members */ - { - GSList *iter = NULL; + /* 1.2 Seek */ + { + tfc = lttv_traceset_context_get_current_tfc(tsc); + g_assert(g_slist_length(list_in)>0); + EventsRequest *events_request = g_slist_nth_data(list_in, 0); + guint seek_count; + + /* 1.2.1 If first request in list_in is a time request */ + if(events_request->start_position == NULL) { + /* - If first req in list_in start time != current time */ + if(tfc == NULL || ltt_time_compare(events_request->start_time, + tfc->timestamp) != 0) + /* - Seek to that time */ + g_debug("SEEK TIME : %lu, %lu", events_request->start_time.tv_sec, + events_request->start_time.tv_nsec); + //lttv_process_traceset_seek_time(tsc, events_request->start_time); + lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc), + events_request->start_time); + + /* Process the traceset with only state hooks */ + seek_count = + lttv_process_traceset_middle(tsc, + events_request->start_time, + G_MAXUINT, NULL); - for(iter=list_in;iter!=NULL;iter=g_slist_next(iter)) { - EventsRequest *events_request = (EventsRequest*)iter->data; - /* 1.3.1 If !servicing */ - if(events_request->servicing == FALSE) { - /* - begin request hooks called - * - servicing = TRUE - */ - lttv_hooks_call(events_request->before_request, (gpointer)tsc); - events_request->servicing = TRUE; - } - /* 1.3.2 call before chunk - * 1.3.3 events hooks added - */ - lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset, - events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id); - } - } - } else { - /* 2. Else, list_in is not empty, we continue a read */ - - { - /* 2.0 For each req of list_in */ - GSList *iter = list_in; - - while(iter != NULL) { - EventsRequest *events_request = (EventsRequest *)iter->data; - - /* - Call before chunk - * - events hooks added - */ - lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset, - events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id); + } else { + LttTime pos_time; + /* Else, the first request in list_in is a position request */ + /* If first req in list_in pos != current pos */ + g_assert(events_request->start_position != NULL); + g_debug("SEEK POS time : %lu, %lu", + lttv_traceset_context_position_get_time( + events_request->start_position).tv_sec, + lttv_traceset_context_position_get_time( + events_request->start_position).tv_nsec); + + g_debug("SEEK POS context time : %lu, %lu", + lttv_traceset_context_get_current_tfc(tsc)->timestamp.tv_sec, + lttv_traceset_context_get_current_tfc(tsc)->timestamp.tv_nsec); + g_assert(events_request->start_position != NULL); + if(lttv_traceset_context_ctx_pos_compare(tsc, + events_request->start_position) != 0) { + /* 1.2.2.1 Seek to that position */ + g_debug("SEEK POSITION"); + //lttv_process_traceset_seek_position(tsc, events_request->start_position); + pos_time = lttv_traceset_context_position_get_time( + events_request->start_position); + + lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc), + pos_time); + + /* Process the traceset with only state hooks */ + seek_count = + lttv_process_traceset_middle(tsc, + ltt_time_infinite, + G_MAXUINT, + events_request->start_position); + g_assert(lttv_traceset_context_ctx_pos_compare(tsc, + events_request->start_position) == 0); - iter = g_slist_next(iter); - } - } - { - tfc = lttv_traceset_context_get_current_tfc(tsc); - - /* 2.1 For each req of list_out */ - GSList *iter = list_out; - - while(iter != NULL) { + } + } + } - gboolean remove = FALSE; - gboolean free_data = FALSE; - EventsRequest *events_request = (EventsRequest *)iter->data; - - /* if req.start time == current context time - * or req.start position == current position*/ - if( ltt_time_compare(events_request->start_time, - tfc->timestamp) == 0 - || - (events_request->start_position != NULL - && - lttv_traceset_context_ctx_pos_compare(tsc, - events_request->start_position) == 0) - ) { - /* - Add to list_in, remove from list_out */ - list_in = g_slist_append(list_in, events_request); - remove = TRUE; - free_data = FALSE; + /* 1.3 Add hooks and call before request for all list_in members */ + { + GSList *iter = NULL; - /* - If !servicing */ + for(iter=list_in;iter!=NULL;iter=g_slist_next(iter)) { + EventsRequest *events_request = (EventsRequest*)iter->data; + /* 1.3.1 If !servicing */ if(events_request->servicing == FALSE) { /* - begin request hooks called * - servicing = TRUE @@ -1005,8 +936,8 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) lttv_hooks_call(events_request->before_request, (gpointer)tsc); events_request->servicing = TRUE; } - /* call before chunk - * events hooks added + /* 1.3.2 call before chunk + * 1.3.3 events hooks added */ lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset, events_request->before_chunk_trace, @@ -1014,230 +945,299 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) events_request->event, events_request->event_by_id); } + } + } else { + /* 2. Else, list_in is not empty, we continue a read */ + + { + /* 2.0 For each req of list_in */ + GSList *iter = list_in; + + while(iter != NULL) { - /* Go to next */ - if(remove) - { - GSList *remove_iter = iter; + EventsRequest *events_request = (EventsRequest *)iter->data; + + /* - Call before chunk + * - events hooks added + */ + lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset, + events_request->before_chunk_trace, + events_request->before_chunk_tracefile, + events_request->event, + events_request->event_by_id); iter = g_slist_next(iter); - if(free_data) events_request_free((EventsRequest*)remove_iter->data); - list_out = g_slist_remove_link(list_out, remove_iter); - } else { // not remove - iter = g_slist_next(iter); } } - } - } - /* 3. Find end criterions */ - { - /* 3.1 End time */ - GSList *iter; - - /* 3.1.1 Find lowest end time in list_in */ - g_assert(g_slist_length(list_in)>0); - end_time = ((EventsRequest*)g_slist_nth_data(list_in,0))->end_time; + { + tfc = lttv_traceset_context_get_current_tfc(tsc); + + /* 2.1 For each req of list_out */ + GSList *iter = list_out; - for(iter=g_slist_nth(list_in,1);iter!=NULL;iter=g_slist_next(iter)) { - EventsRequest *events_request = (EventsRequest*)iter->data; + while(iter != NULL) { - if(ltt_time_compare(events_request->end_time, - end_time) < 0) - end_time = events_request->end_time; - } - - /* 3.1.2 Find lowest start time in list_out */ - for(iter=list_out;iter!=NULL;iter=g_slist_next(iter)) { - EventsRequest *events_request = (EventsRequest*)iter->data; - - if(ltt_time_compare(events_request->start_time, - end_time) < 0) - end_time = events_request->start_time; - } - } + gboolean remove = FALSE; + gboolean free_data = FALSE; + EventsRequest *events_request = (EventsRequest *)iter->data; + + /* if req.start time == current context time + * or req.start position == current position*/ + if( ltt_time_compare(events_request->start_time, + tfc->timestamp) == 0 + || + (events_request->start_position != NULL + && + lttv_traceset_context_ctx_pos_compare(tsc, + events_request->start_position) == 0) + ) { + /* - Add to list_in, remove from list_out */ + list_in = g_slist_append(list_in, events_request); + remove = TRUE; + free_data = FALSE; + + /* - If !servicing */ + if(events_request->servicing == FALSE) { + /* - begin request hooks called + * - servicing = TRUE + */ + lttv_hooks_call(events_request->before_request, (gpointer)tsc); + events_request->servicing = TRUE; + } + /* call before chunk + * events hooks added + */ + lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset, + events_request->before_chunk_trace, + events_request->before_chunk_tracefile, + events_request->event, + events_request->event_by_id); + } - { - /* 3.2 Number of events */ + /* Go to next */ + if(remove) + { + GSList *remove_iter = iter; - /* 3.2.1 Find lowest number of events in list_in */ - GSList *iter; + iter = g_slist_next(iter); + if(free_data) events_request_free((EventsRequest*)remove_iter->data); + list_out = g_slist_remove_link(list_out, remove_iter); + } else { // not remove + iter = g_slist_next(iter); + } + } + } + } - end_nb_events = ((EventsRequest*)g_slist_nth_data(list_in,0))->num_events; + /* 3. Find end criterions */ + { + /* 3.1 End time */ + GSList *iter; + + /* 3.1.1 Find lowest end time in list_in */ + g_assert(g_slist_length(list_in)>0); + end_time = ((EventsRequest*)g_slist_nth_data(list_in,0))->end_time; + + for(iter=g_slist_nth(list_in,1);iter!=NULL;iter=g_slist_next(iter)) { + EventsRequest *events_request = (EventsRequest*)iter->data; - for(iter=g_slist_nth(list_in,1);iter!=NULL;iter=g_slist_next(iter)) { - EventsRequest *events_request = (EventsRequest*)iter->data; + if(ltt_time_compare(events_request->end_time, + end_time) < 0) + end_time = events_request->end_time; + } + + /* 3.1.2 Find lowest start time in list_out */ + for(iter=list_out;iter!=NULL;iter=g_slist_next(iter)) { + EventsRequest *events_request = (EventsRequest*)iter->data; - if(events_request->num_events < end_nb_events) - end_nb_events = events_request->num_events; + if(ltt_time_compare(events_request->start_time, + end_time) < 0) + end_time = events_request->start_time; + } } - /* 3.2.2 Use min(CHUNK_NUM_EVENTS, min num events in list_in) as - * num_events */ - - end_nb_events = MIN(CHUNK_NUM_EVENTS, end_nb_events); - } + { + /* 3.2 Number of events */ - { - /* 3.3 End position */ + /* 3.2.1 Find lowest number of events in list_in */ + GSList *iter; - /* 3.3.1 Find lowest end position in list_in */ - GSList *iter; + end_nb_events = ((EventsRequest*)g_slist_nth_data(list_in,0))->num_events; - end_position =((EventsRequest*)g_slist_nth_data(list_in,0))->end_position; + for(iter=g_slist_nth(list_in,1);iter!=NULL;iter=g_slist_next(iter)) { + EventsRequest *events_request = (EventsRequest*)iter->data; - for(iter=g_slist_nth(list_in,1);iter!=NULL;iter=g_slist_next(iter)) { - EventsRequest *events_request = (EventsRequest*)iter->data; + if(events_request->num_events < end_nb_events) + end_nb_events = events_request->num_events; + } - if(events_request->end_position != NULL && end_position != NULL && - lttv_traceset_context_pos_pos_compare(events_request->end_position, - end_position) <0) - end_position = events_request->end_position; + /* 3.2.2 Use min(CHUNK_NUM_EVENTS, min num events in list_in) as + * num_events */ + + end_nb_events = MIN(CHUNK_NUM_EVENTS, end_nb_events); } - } - - { - /* 3.3.2 Find lowest start position in list_out */ - GSList *iter; - for(iter=list_out;iter!=NULL;iter=g_slist_next(iter)) { - EventsRequest *events_request = (EventsRequest*)iter->data; + { + /* 3.3 End position */ - if(events_request->end_position != NULL && end_position != NULL && - lttv_traceset_context_pos_pos_compare(events_request->end_position, - end_position) <0) - end_position = events_request->end_position; - } - } + /* 3.3.1 Find lowest end position in list_in */ + GSList *iter; - { - /* 4. Call process traceset middle */ - g_debug("Calling process traceset middle with %p, %lu sec %lu nsec, %lu nb ev, %p end pos", tsc, end_time.tv_sec, end_time.tv_nsec, end_nb_events, end_position); - count = lttv_process_traceset_middle(tsc, end_time, end_nb_events, end_position); - - tfc = lttv_traceset_context_get_current_tfc(tsc); - if(tfc != NULL) - g_debug("Context time after middle : %lu, %lu", tfc->timestamp.tv_sec, - tfc->timestamp.tv_nsec); - else - g_debug("End of trace reached after middle."); + end_position =((EventsRequest*)g_slist_nth_data(list_in,0))->end_position; - } - { - /* 5. After process traceset middle */ - tfc = lttv_traceset_context_get_current_tfc(tsc); - - /* - if current context time > traceset.end time */ - if(tfc == NULL || ltt_time_compare(tfc->timestamp, - tsc->time_span.end_time) > 0) { - /* - For each req in list_in */ - GSList *iter = list_in; - - while(iter != NULL) { + for(iter=g_slist_nth(list_in,1);iter!=NULL;iter=g_slist_next(iter)) { + EventsRequest *events_request = (EventsRequest*)iter->data; - gboolean remove = FALSE; - gboolean free_data = FALSE; - EventsRequest *events_request = (EventsRequest *)iter->data; - - /* - Remove events hooks for req - * - Call end chunk for req - */ - lttv_process_traceset_end(tsc, events_request->after_chunk_traceset, - events_request->after_chunk_trace, - events_request->after_chunk_tracefile, - events_request->event, - events_request->event_by_id); - /* - Call end request for req */ - lttv_hooks_call(events_request->after_request, (gpointer)tsc); - - /* - remove req from list_in */ - /* Destroy the request */ - remove = TRUE; - free_data = TRUE; + if(events_request->end_position != NULL && end_position != NULL && + lttv_traceset_context_pos_pos_compare(events_request->end_position, + end_position) <0) + end_position = events_request->end_position; + } + } + + { + /* 3.3.2 Find lowest start position in list_out */ + GSList *iter; - /* Go to next */ - if(remove) - { - GSList *remove_iter = iter; + for(iter=list_out;iter!=NULL;iter=g_slist_next(iter)) { + EventsRequest *events_request = (EventsRequest*)iter->data; - iter = g_slist_next(iter); - if(free_data) events_request_free((EventsRequest*)remove_iter->data); - list_in = g_slist_remove_link(list_in, remove_iter); - } else { // not remove - iter = g_slist_next(iter); - } + if(events_request->end_position != NULL && end_position != NULL && + lttv_traceset_context_pos_pos_compare(events_request->end_position, + end_position) <0) + end_position = events_request->end_position; } } + { - /* 5.1 For each req in list_in */ - GSList *iter = list_in; - - while(iter != NULL) { + /* 4. Call process traceset middle */ + g_debug("Calling process traceset middle with %p, %lu sec %lu nsec, %lu nb ev, %p end pos", tsc, end_time.tv_sec, end_time.tv_nsec, end_nb_events, end_position); + count = lttv_process_traceset_middle(tsc, end_time, end_nb_events, end_position); - gboolean remove = FALSE; - gboolean free_data = FALSE; - EventsRequest *events_request = (EventsRequest *)iter->data; - - /* - Remove events hooks for req - * - Call end chunk for req - */ - lttv_process_traceset_end(tsc, events_request->after_chunk_traceset, - events_request->after_chunk_trace, - events_request->after_chunk_tracefile, - events_request->event, - events_request->event_by_id); - - /* - req.num -= count */ - g_assert(events_request->num_events >= count); - events_request->num_events -= count; - - g_assert(tfc != NULL); - /* - if req.num == 0 - * or - * current context time >= req.end time - * or - * req.end pos == current pos - * or - * req.stop_flag == TRUE - */ - if( events_request->num_events == 0 - || - events_request->stop_flag == TRUE - || - ltt_time_compare(tfc->timestamp, - events_request->end_time) >= 0 - || - (events_request->end_position != NULL - && - lttv_traceset_context_ctx_pos_compare(tsc, - events_request->end_position) == 0) + tfc = lttv_traceset_context_get_current_tfc(tsc); + if(tfc != NULL) + g_debug("Context time after middle : %lu, %lu", tfc->timestamp.tv_sec, + tfc->timestamp.tv_nsec); + else + g_debug("End of trace reached after middle."); - ) { - g_assert(events_request->servicing == TRUE); - /* - Call end request for req - * - remove req from list_in */ + } + { + /* 5. After process traceset middle */ + tfc = lttv_traceset_context_get_current_tfc(tsc); + + /* - if current context time > traceset.end time */ + if(tfc == NULL || ltt_time_compare(tfc->timestamp, + tsc->time_span.end_time) > 0) { + /* - For each req in list_in */ + GSList *iter = list_in; + + while(iter != NULL) { + + gboolean remove = FALSE; + gboolean free_data = FALSE; + EventsRequest *events_request = (EventsRequest *)iter->data; + + /* - Remove events hooks for req + * - Call end chunk for req + */ + lttv_process_traceset_end(tsc, events_request->after_chunk_traceset, + events_request->after_chunk_trace, + events_request->after_chunk_tracefile, + events_request->event, + events_request->event_by_id); + /* - Call end request for req */ lttv_hooks_call(events_request->after_request, (gpointer)tsc); + /* - remove req from list_in */ /* Destroy the request */ remove = TRUE; free_data = TRUE; + + /* Go to next */ + if(remove) + { + GSList *remove_iter = iter; + + iter = g_slist_next(iter); + if(free_data) events_request_free((EventsRequest*)remove_iter->data); + list_in = g_slist_remove_link(list_in, remove_iter); + } else { // not remove + iter = g_slist_next(iter); + } } - - /* Go to next */ - if(remove) - { - GSList *remove_iter = iter; + } + { + /* 5.1 For each req in list_in */ + GSList *iter = list_in; + + while(iter != NULL) { - iter = g_slist_next(iter); - if(free_data) events_request_free((EventsRequest*)remove_iter->data); - list_in = g_slist_remove_link(list_in, remove_iter); - } else { // not remove - iter = g_slist_next(iter); + gboolean remove = FALSE; + gboolean free_data = FALSE; + EventsRequest *events_request = (EventsRequest *)iter->data; + + /* - Remove events hooks for req + * - Call end chunk for req + */ + lttv_process_traceset_end(tsc, events_request->after_chunk_traceset, + events_request->after_chunk_trace, + events_request->after_chunk_tracefile, + events_request->event, + events_request->event_by_id); + + /* - req.num -= count */ + g_assert(events_request->num_events >= count); + events_request->num_events -= count; + + g_assert(tfc != NULL); + /* - if req.num == 0 + * or + * current context time >= req.end time + * or + * req.end pos == current pos + * or + * req.stop_flag == TRUE + */ + if( events_request->num_events == 0 + || + events_request->stop_flag == TRUE + || + ltt_time_compare(tfc->timestamp, + events_request->end_time) >= 0 + || + (events_request->end_position != NULL + && + lttv_traceset_context_ctx_pos_compare(tsc, + events_request->end_position) == 0) + + ) { + g_assert(events_request->servicing == TRUE); + /* - Call end request for req + * - remove req from list_in */ + lttv_hooks_call(events_request->after_request, (gpointer)tsc); + /* - remove req from list_in */ + /* Destroy the request */ + remove = TRUE; + free_data = TRUE; + } + + /* Go to next */ + if(remove) + { + GSList *remove_iter = iter; + + iter = g_slist_next(iter); + if(free_data) events_request_free((EventsRequest*)remove_iter->data); + list_in = g_slist_remove_link(list_in, remove_iter); + } else { // not remove + iter = g_slist_next(iter); + } } } } } - /* End of removed servicing loop : leave control to GTK instead. */ // if(gtk_events_pending()) break; //} diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c index 84b053bd..4b09a5d9 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c @@ -842,9 +842,12 @@ void lttvwindow_events_request_remove_all(Tab *tab, (GCompareFunc)find_viewer)) != NULL) { EventsRequest *events_request = (EventsRequest *)element->data; - if(events_request->servicing == TRUE) { - lttv_hooks_call(events_request->after_request, NULL); - } + // Modified so a viewer being destroyed won't have its after_request + // called. Not so important anyway. Note that a viewer that call this + // remove_all function will not get its after_request called. + //if(events_request->servicing == TRUE) { + // lttv_hooks_call(events_request->after_request, NULL); + //} g_free(events_request); tab->events_requests = g_slist_remove_link(tab->events_requests, element); } -- 2.34.1