| 893 | } |
| 894 | |
| 895 | void ChangeLog::initSegments() |
| 896 | { |
| 897 | clearSegments(); |
| 898 | |
| 899 | const auto state = m_sharedMemory->getHeader(); |
| 900 | |
| 901 | AutoPtr<PathUtils::DirIterator> iter; |
| 902 | |
| 903 | for (iter = PathUtils::newDirIterator(getPool(), m_config->journalDirectory); |
| 904 | *iter; ++(*iter)) |
| 905 | { |
| 906 | const auto filename = **iter; |
| 907 | |
| 908 | const auto fd = os_utils::openCreateSharedFile(filename.c_str(), O_BINARY); |
| 909 | |
| 910 | AutoPtr<Segment> segment(FB_NEW_POOL(getPool()) Segment(getPool(), filename, fd)); |
| 911 | |
| 912 | if (!validateSegment(segment)) |
| 913 | continue; |
| 914 | |
| 915 | if (segment->getSequence() > state->sequence) |
| 916 | segment->setState(SEGMENT_STATE_FREE); |
| 917 | |
| 918 | if (segment->getState() == SEGMENT_STATE_FREE) |
| 919 | { |
| 920 | segment->closeFile(); |
| 921 | |
| 922 | if (segment->getSequence() + m_config->segmentCount <= state->sequence) |
| 923 | { |
| 924 | const PathName& fname = segment->getPathName(); |
| 925 | unlink(fname.c_str()); |
| 926 | continue; |
| 927 | } |
| 928 | } |
| 929 | |
| 930 | segment->addRef(); |
| 931 | m_segments.add(segment.release()); |
| 932 | } |
| 933 | |
| 934 | m_generation = state->generation; |
| 935 | } |
| 936 | |
| 937 | void ChangeLog::clearSegments() |
| 938 | { |
nothing calls this directly
no test coverage detected