mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user