void MDBManager::pushConnection(MSqlDatabase *db) { m_lock.lock(); #if REUSE_CONNECTION if (db == m_inuse[QThread::currentThread()]) { int cnt = --m_inuse_count[QThread::currentThread()]; if (cnt > 0) { m_lock.unlock(); return; } m_inuse[QThread::currentThread()] = NULL; } #endif if (db) { db->m_lastDBKick = MythDate::current(); m_pool[QThread::currentThread()].push_front(db); } m_lock.unlock(); PurgeIdleConnections(true); }
MSqlDatabase *MDBManager::popConnection() { PurgeIdleConnections(); m_sem->acquire(); m_lock.lock(); MSqlDatabase *db; if (m_pool.isEmpty()) { db = new MSqlDatabase("DBManager" + QString::number(m_nextConnID++)); ++m_connCount; LOG(VB_GENERAL, LOG_INFO, QString("New DB connection, total: %1").arg(m_connCount)); } else db = m_pool.takeLast(); m_lock.unlock(); db->OpenDatabase(); return db; }
MSqlDatabase *MDBManager::popConnection(bool reuse) { PurgeIdleConnections(true); m_lock.lock(); MSqlDatabase *db; #if REUSE_CONNECTION if (reuse) { db = m_inuse[QThread::currentThread()]; if (db != NULL) { m_inuse_count[QThread::currentThread()]++; m_lock.unlock(); return db; } } #endif DBList &list = m_pool[QThread::currentThread()]; if (list.isEmpty()) { db = new MSqlDatabase("DBManager" + QString::number(m_nextConnID++)); ++m_connCount; LOG(VB_DATABASE, LOG_INFO, QString("New DB connection, total: %1").arg(m_connCount)); } else { db = list.back(); list.pop_back(); } #if REUSE_CONNECTION if (reuse) { m_inuse_count[QThread::currentThread()]=1; m_inuse[QThread::currentThread()] = db; } #endif m_lock.unlock(); db->OpenDatabase(); return db; }
void MDBManager::pushConnection(MSqlDatabase *db) { m_lock.lock(); if (db) { db->m_lastDBKick = QDateTime::currentDateTime(); m_pool.prepend(db); } m_lock.unlock(); m_sem->release(); PurgeIdleConnections(); }