Core/Threading: Fixed possible race condition with m_timeOutTime and fixed Thread #1: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread in PCQ

This commit is contained in:
Shauren
2014-08-12 18:18:52 +02:00
parent 9f7075215d
commit bd4edf6e22
2 changed files with 9 additions and 15 deletions

View File

@@ -373,22 +373,21 @@ class WorldSession
void SetLatency(uint32 latency) { m_latency = latency; }
void ResetClientTimeDelay() { m_clientTimeDelay = 0; }
std::atomic<time_t> m_timeOutTime;
std::atomic<int32> m_timeOutTime;
void UpdateTimeOutTime(uint32 diff)
{
if (time_t(diff) > m_timeOutTime)
m_timeOutTime = 0;
else
m_timeOutTime -= diff;
m_timeOutTime -= int32(diff);
}
void ResetTimeOutTime()
{
m_timeOutTime = sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME);
m_timeOutTime = int32(sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME));
}
bool IsConnectionIdle() const
{
return (m_timeOutTime <= 0 && !m_inQueue);
return m_timeOutTime <= 0 && !m_inQueue;
}
// Recruit-A-Friend Handling

View File

@@ -39,10 +39,8 @@ public:
void Push(const T& value)
{
{
std::lock_guard<std::mutex> lock(_queueLock);
_queue.push(std::move(value));
}
std::lock_guard<std::mutex> lock(_queueLock);
_queue.push(std::move(value));
_condition.notify_one();
}
@@ -72,10 +70,7 @@ public:
{
std::unique_lock<std::mutex> lock(_queueLock);
while (_queue.empty() && !_shutdown)
{
_condition.wait(lock);
}
_condition.wait(lock, [this]() { return !_queue.empty() || _shutdown; });
if (_queue.empty() || _shutdown)
return;