| 512 | } |
| 513 | |
| 514 | int64_t get_num_of_req(reader_t *const reader) { |
| 515 | if (reader->n_total_req > 0) return reader->n_total_req; |
| 516 | |
| 517 | int64_t n_req = 0; |
| 518 | |
| 519 | if (reader->trace_format == TXT_TRACE_FORMAT || reader->is_zstd_file) { |
| 520 | reader_t *reader_copy = clone_reader(reader); |
| 521 | reader_copy->mmap_offset = 0; |
| 522 | request_t *req = new_request(); |
| 523 | while (read_one_req(reader_copy, req) == 0) { |
| 524 | n_req++; |
| 525 | } |
| 526 | free_request(req); |
| 527 | close_reader(reader_copy); |
| 528 | } else { |
| 529 | ERROR("should not reach here\n"); |
| 530 | abort(); |
| 531 | } |
| 532 | reader->n_total_req = n_req; |
| 533 | return n_req; |
| 534 | } |
| 535 | |
| 536 | reader_t *clone_reader(const reader_t *const reader_in) { |
| 537 | reader_t *reader = setup_reader(reader_in->trace_path, reader_in->trace_type, |