X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Fltt%2Ftracefile.c;h=e742285468368a76272fff78d6a73d7201926cd6;hb=336900061b500618df3b160ac88209a6450352dc;hp=8edeb54cb44c692848b66848139c89f69c809118;hpb=d25b4e2b09d3704b52522f8d75b34885b2a83c80;p=lttv.git diff --git a/ltt/branches/poly/ltt/tracefile.c b/ltt/branches/poly/ltt/tracefile.c index 8edeb54c..e7422854 100644 --- a/ltt/branches/poly/ltt/tracefile.c +++ b/ltt/branches/poly/ltt/tracefile.c @@ -36,9 +36,6 @@ int skipEvent(LttTracefile * t); /* compare two time (LttTime), 0:t1=t2, -1:t1t2 */ int timecmp(LttTime * t1, LttTime * t2); -/* get an integer number */ -int getIntNumber(int size1, void *evD); - /***************************************************************************** @@ -761,6 +758,15 @@ LttEvent *ltt_tracefile_read(LttTracefile *t) LttEvent * lttEvent = (LttEvent *)g_new(LttEvent, 1); int err; + if(t->cur_event_pos == t->buffer + t->block_size){ + if(t->which_block == t->block_number){ + g_free(lttEvent); + return NULL; + } + err = readBlock(t, t->which_block + 1); + if(err)g_error("Can not read tracefile"); + } + lttEvent->event_id = (int)(*(uint16_t *)(t->cur_event_pos)); if(lttEvent->event_id == TRACE_TIME_HEARTBEAT) t->cur_heart_beat_number++; @@ -776,16 +782,12 @@ LttEvent *ltt_tracefile_read(LttTracefile *t) lttEvent->tracefile = t; lttEvent->data = t->cur_event_pos + EVENT_HEADER_SIZE; + lttEvent->which_block = t->which_block; + lttEvent->which_event = t->which_event; //update the fields of the current event and go to the next event err = skipEvent(t); - if(err == ENOMEM){ - g_free(lttEvent); - return NULL; - } - if(err == ENOENT) return lttEvent; if(err == ERANGE) g_error("event id is out of range\n"); - if(err)g_error("Can not read tracefile\n"); return lttEvent; } @@ -890,10 +892,6 @@ void updateTracefile(LttTracefile * tf) * t : tracefile *return value * 0 : success - * EINVAL : lseek fail - * EIO : can not read from the file - * ENOMEM : end of file - * ENOENT : last event * ERANGE : event id is out of range ****************************************************************************/ @@ -903,53 +901,30 @@ int skipEvent(LttTracefile * t) void * evData; LttEventType * evT; LttField * rootFld; - static int evCount = 0; - - if(evCount){ - if(t->which_block == t->block_number && - evCount == t->which_event){ - return ENOMEM; - }else evCount = 0; - } evId = (int)(*(uint16_t *)(t->cur_event_pos)); evData = t->cur_event_pos + EVENT_HEADER_SIZE; - //regard BLOCK_START, END and HEARTBEAT as special case, there are buildin events - if(evId != TRACE_BLOCK_START && evId != TRACE_BLOCK_END && evId != TRACE_TIME_HEARTBEAT){ - evT = ltt_trace_eventtype_get(t->trace,(unsigned)evId); + evT = ltt_trace_eventtype_get(t->trace,(unsigned)evId); - if(evT) rootFld = evT->root_field; - else return ERANGE; + if(evT) rootFld = evT->root_field; + else return ERANGE; - if(rootFld){ - //event has string/sequence or the last event is not the same event - if((evT->latest_block!=t->which_block || evT->latest_event!=t->which_event) - && rootFld->field_fixed == 0){ - setFieldsOffset(t, evT, evData, t->trace); - } - t->cur_event_pos += EVENT_HEADER_SIZE + rootFld->field_size; - }else t->cur_event_pos += EVENT_HEADER_SIZE; - - evT->latest_block = t->which_block; - evT->latest_event = t->which_event; - }else{ - if(evId == TRACE_BLOCK_START || evId == TRACE_BLOCK_END){ - t->cur_event_pos += sizeof(BlockStart) + EVENT_HEADER_SIZE; - }else{ - t->cur_event_pos += sizeof(TimeHeartbeat) + EVENT_HEADER_SIZE; + if(rootFld){ + //event has string/sequence or the last event is not the same event + if((evT->latest_block!=t->which_block || evT->latest_event!=t->which_event) + && rootFld->field_fixed == 0){ + setFieldsOffset(t, evT, evData, t->trace); } - } - + t->cur_event_pos += EVENT_HEADER_SIZE + rootFld->field_size; + }else t->cur_event_pos += EVENT_HEADER_SIZE; + + evT->latest_block = t->which_block; + evT->latest_event = t->which_event; + //the next event is in the next block if(evId == TRACE_BLOCK_END){ - if(t->which_block == t->block_number){ - t->which_event++; - evCount = t->which_event; - return ENOENT; - } - err = readBlock(t, t->which_block + 1); - if(err) return err; + t->cur_event_pos = t->buffer + t->block_size; }else{ t->which_event++; t->current_event_time = getEventTime(t); @@ -1103,6 +1078,7 @@ int getFieldtypeSize(LttTracefile * t, LttEventType * evT, int offsetRoot, }else if(type->type_class == LTT_SEQUENCE){ size1 = (int) ltt_type_size(trace, type); if(fld->field_fixed == -1){ + fld->sequ_number_size = size1; fld->field_fixed = 0; size = getFieldtypeSize(t, evT, offsetRoot,0,fld->child[0], NULL, trace); fld->element_size = size;