| 941 | } |
| 942 | |
| 943 | ChangeLog::Segment* ChangeLog::createSegment() |
| 944 | { |
| 945 | const auto state = m_sharedMemory->getHeader(); |
| 946 | const auto sequence = state->sequence + 1; |
| 947 | |
| 948 | PathName filename; |
| 949 | filename.printf(FILENAME_PATTERN, m_config->filePrefix.c_str(), sequence); |
| 950 | filename = m_config->journalDirectory + filename; |
| 951 | |
| 952 | const auto fd = os_utils::openCreateSharedFile(filename.c_str(), O_EXCL | O_BINARY); |
| 953 | |
| 954 | SegmentHeader dummyHeader = {0}; |
| 955 | if (::write(fd, &dummyHeader, sizeof(SegmentHeader)) != sizeof(SegmentHeader)) |
| 956 | { |
| 957 | ::close(fd); |
| 958 | raiseError("Journal file %s write failed (error %d)", filename.c_str(), ERRNO); |
| 959 | } |
| 960 | |
| 961 | const auto segment = FB_NEW_POOL(getPool()) Segment(getPool(), filename, fd); |
| 962 | |
| 963 | segment->init(sequence, m_guid); |
| 964 | segment->addRef(); |
| 965 | |
| 966 | m_segments.add(segment); |
| 967 | state->generation++; |
| 968 | state->sequence++; |
| 969 | |
| 970 | return segment; |
| 971 | } |
| 972 | |
| 973 | ChangeLog::Segment* ChangeLog::reuseSegment(ChangeLog::Segment* segment) |
| 974 | { |
nothing calls this directly
no test coverage detected