-bool RecordFileWriter::ReadDataSection(std::vector<std::unique_ptr<Record>>* records) {
- if (fflush(record_fp_) != 0) {
- PLOG(ERROR) << "fflush() failed";
- return false;
- }
- uint64_t file_size;
- if (!SeekFileEnd(&file_size)) {
- return false;
- }
- size_t mmap_len = static_cast<size_t>(file_size);
- void* mmap_addr = mmap(nullptr, mmap_len, PROT_READ, MAP_SHARED, fileno(record_fp_), 0);
- if (mmap_addr == MAP_FAILED) {
- PLOG(ERROR) << "mmap() failed";
- return false;
- }
- const char* data_section = reinterpret_cast<char*>(mmap_addr) + data_section_offset_;
- std::vector<std::unique_ptr<Record>> result =
- ReadRecordsFromBuffer(event_attr_, data_section, data_section_size_);
- if (munmap(mmap_addr, mmap_len) == -1) {
- PLOG(ERROR) << "munmap() failed";
- return false;
- }
- *records = std::move(result);
- return true;
-}
-