I am including an example to better illustrace my fix. the current binary search has a case where high can be lower then low. An example: 51 blocks, the element is somewhere in the 12th block. trace of before : low : 0, high 51 , block_num -1 low : 0, high 24 , block_num 25 low : 13, high 24 , block_num 12 low : 13, high 17 , block_num 18 low : 13, high 14 , block_num 15 low : 13, high 12 , block_num 13 This will assert and fail. The trace after will produce the following walkthrough low : 0, high 51 , block_num -1 low : 0, high 24 , block_num 25 low : 0, high 24 , block_num 12 Found!
Made the tracefile.c seek more robust. Fixes a rare crash where high can be lower than low in a seek. Signed-off-by : Matthew Khouzam [email protected] diff --git a/ltt/tracefile.c b/ltt/tracefile.c index 0d8a248..d9aba27 100644 --- a/ltt/tracefile.c +++ b/ltt/tracefile.c @@ -1095,7 +1095,7 @@ int ltt_tracefile_seek_time(LttTracefile *tf, LttTime time) } else if(ltt_time_compare(time, tf->buffer.begin.timestamp) < 0) { /* go to lower part */ - high = block_num - 1; + high = block_num; // you don't want block_num - 1 since block_num can equal low , in which case high < low. } else if(ltt_time_compare(time, tf->buffer.end.timestamp) > 0) { /* go to higher part */ low = block_num + 1;
_______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
