diff --git a/core/UserMessages.cpp b/core/UserMessages.cpp index 922090455..48a10a8bc 100644 --- a/core/UserMessages.cpp +++ b/core/UserMessages.cpp @@ -312,12 +312,12 @@ bool UserMessages::EndMessage() } #if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_BLADE + PbHandle localBuffer = std::move(m_FakeEngineBuffer); if (m_CurFlags & USERMSG_BLOCKHOOKS) { - PbHandle priv = m_FakeEngineBuffer.ToPrivate(m_CurId); + PbHandle priv = localBuffer.ToPrivate(m_CurId); ENGINE_CALL(SendUserMessage)(static_cast(m_CellRecFilter), m_CurId, *priv.GetPrivateMessage()); - m_FakeEngineBuffer = nullptr; } else { OnMessageEnd_Pre(); @@ -327,10 +327,9 @@ bool UserMessages::EndMessage() case MRES_HANDLED: case MRES_OVERRIDE: { - PbHandle priv = m_FakeEngineBuffer.ToPrivate(m_CurId); + PbHandle priv = localBuffer.ToPrivate(m_CurId); engine->SendUserMessage(static_cast(m_CellRecFilter), m_CurId, *priv.GetPrivateMessage()); - m_FakeEngineBuffer = nullptr; break; } //case MRES_SUPERCEDE: diff --git a/core/pb_handle.h b/core/pb_handle.h index 73e6f434c..5951b7af7 100644 --- a/core/pb_handle.h +++ b/core/pb_handle.h @@ -105,7 +105,8 @@ public: } PbHandle& operator =(PbHandle&& other) { - maybe_free(); + if (other.msg_ != msg_) + maybe_free(); msg_ = other.msg_; ownership_ = other.ownership_; locality_ = other.locality_;