| 186 | } |
| 187 | |
| 188 | BackupManager::StateWriteGuard::~StateWriteGuard() |
| 189 | { |
| 190 | Database* const dbb = m_tdbb->getDatabase(); |
| 191 | Jrd::Attachment* const att = m_tdbb->getAttachment(); |
| 192 | |
| 193 | // It is important to set state into nbak_state_unknown *before* release of state lock, |
| 194 | // otherwise someone could acquire state lock, fetch and modify some page before state will |
| 195 | // be set into unknown. But dirty page can't be written when backup state is unknown |
| 196 | // because write target (database or delta) is also unknown. |
| 197 | |
| 198 | if (!m_success) |
| 199 | { |
| 200 | NBAK_TRACE( ("invalidate state") ); |
| 201 | dbb->dbb_backup_manager->setState(Ods::hdr_nbak_unknown); |
| 202 | } |
| 203 | |
| 204 | releaseHeader(); |
| 205 | dbb->dbb_backup_manager->unlockStateWrite(m_tdbb); |
| 206 | dbb->dbb_backup_manager->localStateLock.endWrite(); |
| 207 | } |
| 208 | |
| 209 | void BackupManager::StateWriteGuard::releaseHeader() |
| 210 | { |
nothing calls this directly
no test coverage detected