| 206 | |
| 207 | |
| 208 | void MonitoringData::acquire() |
| 209 | { |
| 210 | m_localMutex.enter(FB_FUNCTION); |
| 211 | m_sharedMemory->mutexLock(); |
| 212 | |
| 213 | // Reattach if someone has just deleted the shared file |
| 214 | |
| 215 | while (m_sharedMemory->getHeader()->isDeleted()) |
| 216 | { |
| 217 | // Shared memory must be empty at this point |
| 218 | fb_assert(m_sharedMemory->getHeader()->used == HEADER_SIZE); |
| 219 | |
| 220 | m_sharedMemory->mutexUnlock(); |
| 221 | m_sharedMemory.reset(); |
| 222 | |
| 223 | Thread::yield(); |
| 224 | |
| 225 | initSharedFile(); |
| 226 | m_sharedMemory->mutexLock(); |
| 227 | } |
| 228 | |
| 229 | if (m_sharedMemory->getHeader()->allocated > m_sharedMemory->sh_mem_length_mapped) |
| 230 | { |
| 231 | #ifdef HAVE_OBJECT_MAP |
| 232 | FbLocalStatus statusVector; |
| 233 | if (!m_sharedMemory->remapFile(&statusVector, m_sharedMemory->getHeader()->allocated, false)) |
| 234 | { |
| 235 | release(); |
| 236 | status_exception::raise(&statusVector); |
| 237 | } |
| 238 | #else |
| 239 | release(); |
| 240 | status_exception::raise(Arg::Gds(isc_montabexh)); |
| 241 | #endif |
| 242 | } |
| 243 | } |
| 244 | |
| 245 | |
| 246 | void MonitoringData::release() |
nothing calls this directly
no test coverage detected