| 161 | /******************************** BackupManager::StateWriteGuard ******************************/ |
| 162 | |
| 163 | BackupManager::StateWriteGuard::StateWriteGuard(thread_db* tdbb, Jrd::WIN* window) |
| 164 | : m_tdbb(tdbb), m_window(NULL), m_success(false) |
| 165 | { |
| 166 | Database* const dbb = tdbb->getDatabase(); |
| 167 | Jrd::Attachment* const att = tdbb->getAttachment(); |
| 168 | |
| 169 | dbb->dbb_backup_manager->beginFlush(); |
| 170 | CCH_flush(tdbb, FLUSH_ALL, 0); // Flush local cache to release all dirty pages |
| 171 | |
| 172 | CCH_FETCH(tdbb, window, LCK_write, pag_header); |
| 173 | |
| 174 | dbb->dbb_backup_manager->localStateLock.beginWrite(FB_FUNCTION); |
| 175 | |
| 176 | if (!dbb->dbb_backup_manager->lockStateWrite(tdbb, LCK_WAIT)) |
| 177 | { |
| 178 | dbb->dbb_backup_manager->localStateLock.endWrite(); |
| 179 | ERR_bugcheck_msg("Can't lock state for write"); |
| 180 | } |
| 181 | |
| 182 | dbb->dbb_backup_manager->endFlush(); |
| 183 | |
| 184 | NBAK_TRACE(("backup state locked for write")); |
| 185 | m_window = window; |
| 186 | } |
| 187 | |
| 188 | BackupManager::StateWriteGuard::~StateWriteGuard() |
| 189 | { |
nothing calls this directly
no test coverage detected