aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/shared/Database/DatabaseWorkerPool.h26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index 899c0f8f63d..9f7bf6d72dc 100755
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -37,13 +37,12 @@ class PingOperation : public SQLOperation
/// Operation for idle delaythreads
bool Execute()
{
- for (;;)
- if (m_conn->LockIfReady())
- {
- m_conn->Ping();
- m_conn->Unlock();
- return true;
- }
+ if (m_conn->LockIfReady())
+ {
+ m_conn->Ping();
+ m_conn->Unlock();
+ return true;
+ }
return false;
}
@@ -305,10 +304,17 @@ class DatabaseWorkerPool
void KeepAlive()
{
- /// Ping syncrhonous connections
+ /// Ping synchronous connections
for (uint8 i = 0; i < m_connections[IDX_SYNCH].size(); ++i)
- m_connections[IDX_SYNCH][i]->Ping();
-
+ {
+ T* t = m_connections[IDX_SYNCH][i];
+ if (t->LockIfReady())
+ {
+ t->Ping();
+ t->Unlock();
+ }
+ }
+
/// Assuming all worker threads are free, every worker thread will receive 1 ping operation request
/// If one or more worker threads are busy, the ping operations will not be split evenly, but this doesn't matter
/// as the sole purpose is to prevent connections from idling.