int ShmCacheManager::init(const char *pStoreDir) { LsShm *pShm; LsShmPool *pPool; const char *pFileName = ".cacheman"; int attempts; int ret = -1; for (attempts = 0; attempts < 3; ++attempts) { pShm = LsShm::open(pFileName, 40960, pStoreDir); if (!pShm) { pShm = LsShm::open(pFileName, 40960, pStoreDir); if (!pShm) { logShmError(); return LS_FAIL; } } pPool = pShm->getGlobalPool(); if (!pPool) { pShm->deleteFile(); pShm->close(); continue; } pPool->disableLock(); pPool->lock(); if ((initCacheInfo(pPool) == LS_FAIL) || (ret = initTables(pPool)) == LS_FAIL) { pPool->unlock(); pPool->close(); pShm->deleteFile(); pShm->close(); } else break; } pPool->unlock(); pPool->enableLock(); return ret; }