mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2024-11-08 08:47:17 +01:00
Add back the VMClose event on event types to avoid crashes.
This commit is contained in:
parent
1fd54aead6
commit
dd685a13e4
@ -33,17 +33,19 @@ BasicEvent::BasicEvent(SQInt32 type, bool suspended) noexcept
|
|||||||
, m_Data()
|
, m_Data()
|
||||||
, m_Suspended(suspended)
|
, m_Suspended(suspended)
|
||||||
{
|
{
|
||||||
|
// Attach to the specified event signal
|
||||||
Attach();
|
Attach();
|
||||||
|
// Receive notification when the VM is about to be closed to release object references
|
||||||
|
_Core->VMClose.Connect< BasicEvent, &BasicEvent::VMClose >(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
BasicEvent::~BasicEvent()
|
BasicEvent::~BasicEvent()
|
||||||
{
|
{
|
||||||
|
// Detach from the specified event signal
|
||||||
Detach();
|
Detach();
|
||||||
// Release the reference to the specified callback
|
// Stop receiving notification when the VM is about to be closed
|
||||||
m_OnTrigger.Release2();
|
_Core->VMClose.Disconnect< BasicEvent, &BasicEvent::VMClose >(this);
|
||||||
// Release the reference to the specified user data
|
|
||||||
m_Data.Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@ -82,10 +84,30 @@ bool BasicEvent::operator >= (const BasicEvent & o) const noexcept
|
|||||||
return (m_Type >= o.m_Type);
|
return (m_Type >= o.m_Type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void BasicEvent::VMClose() noexcept
|
||||||
|
{
|
||||||
|
// Release the reference to the specified callbacks
|
||||||
|
m_OnTrigger.Release2();
|
||||||
|
// Release the reference to the specified user data
|
||||||
|
m_Data.Release();
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInt32 BasicEvent::Cmp(const BasicEvent & o) const noexcept
|
SQInt32 BasicEvent::Cmp(const BasicEvent & o) const noexcept
|
||||||
{
|
{
|
||||||
return m_Type == o.m_Type ? 0 : (m_Type > o.m_Type ? 1 : -1);
|
if (m_Type == o.m_Type)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (m_Type > o.m_Type)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -117,6 +117,11 @@ public:
|
|||||||
return (m_Type == EVT_UNKNOWN || m_Type >= EVT_COUNT);
|
return (m_Type == EVT_UNKNOWN || m_Type >= EVT_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
|
void VMClose() noexcept;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* ...
|
* ...
|
||||||
*/
|
*/
|
||||||
|
@ -50,6 +50,8 @@ GlobalEvent::GlobalEvent(SQInt32 type, bool suspended) noexcept
|
|||||||
{
|
{
|
||||||
// Attach to the specified event signal
|
// Attach to the specified event signal
|
||||||
Attach();
|
Attach();
|
||||||
|
// Receive notification when the VM is about to be closed to release object references
|
||||||
|
_Core->VMClose.Connect< GlobalEvent, &GlobalEvent::VMClose >(this);
|
||||||
/* Entity filters are empty so there's nothing to hook to! */
|
/* Entity filters are empty so there's nothing to hook to! */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,16 +60,9 @@ GlobalEvent::~GlobalEvent()
|
|||||||
{
|
{
|
||||||
// Detach from the specified event signal
|
// Detach from the specified event signal
|
||||||
Detach();
|
Detach();
|
||||||
|
// Stop receiving notification when the VM is about to be closed
|
||||||
|
_Core->VMClose.Disconnect< GlobalEvent, &GlobalEvent::VMClose >(this);
|
||||||
/* We're expecting the entity filters to unhook themselves from the destroy signal! */
|
/* We're expecting the entity filters to unhook themselves from the destroy signal! */
|
||||||
|
|
||||||
// Release the reference to the specified callbacks
|
|
||||||
m_OnTrigger.Release2();
|
|
||||||
m_OnInclude.Release2();
|
|
||||||
m_OnExclude.Release2();
|
|
||||||
m_OnCleared.Release2();
|
|
||||||
m_OnRelease.Release2();
|
|
||||||
// Release the reference to the specified user data
|
|
||||||
m_Data.Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@ -106,6 +101,19 @@ bool GlobalEvent::operator >= (const GlobalEvent & o) const noexcept
|
|||||||
return (m_Type >= o.m_Type);
|
return (m_Type >= o.m_Type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void GlobalEvent::VMClose() noexcept
|
||||||
|
{
|
||||||
|
// Release the reference to the specified callbacks
|
||||||
|
m_OnTrigger.Release2();
|
||||||
|
m_OnInclude.Release2();
|
||||||
|
m_OnExclude.Release2();
|
||||||
|
m_OnCleared.Release2();
|
||||||
|
m_OnRelease.Release2();
|
||||||
|
// Release the reference to the specified user data
|
||||||
|
m_Data.Release();
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInt32 GlobalEvent::Cmp(const GlobalEvent & o) const noexcept
|
SQInt32 GlobalEvent::Cmp(const GlobalEvent & o) const noexcept
|
||||||
{
|
{
|
||||||
|
@ -365,6 +365,11 @@ public:
|
|||||||
return (m_Type == EVT_UNKNOWN || m_Type >= EVT_COUNT);
|
return (m_Type == EVT_UNKNOWN || m_Type >= EVT_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
|
void VMClose() noexcept;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* ...
|
* ...
|
||||||
*/
|
*/
|
||||||
|
@ -48,6 +48,8 @@ LocalEvent::LocalEvent(SQInt32 type, bool suspended) noexcept
|
|||||||
, m_Textdraws(this)
|
, m_Textdraws(this)
|
||||||
, m_Vehicles(this)
|
, m_Vehicles(this)
|
||||||
{
|
{
|
||||||
|
// Receive notification when the VM is about to be closed to release object references
|
||||||
|
_Core->VMClose.Connect< LocalEvent, &LocalEvent::VMClose >(this);
|
||||||
/* Entity filters are empty so there's nothing to hook right now! */
|
/* Entity filters are empty so there's nothing to hook right now! */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,16 +58,9 @@ LocalEvent::~LocalEvent()
|
|||||||
{
|
{
|
||||||
// Detach from all attached signals
|
// Detach from all attached signals
|
||||||
Detach();
|
Detach();
|
||||||
|
// Stop receiving notification when the VM is about to be closed
|
||||||
|
_Core->VMClose.Disconnect< LocalEvent, &LocalEvent::VMClose >(this);
|
||||||
/* The entity filters should to unhook themselves from the destroy signal! */
|
/* The entity filters should to unhook themselves from the destroy signal! */
|
||||||
|
|
||||||
// Release the reference to the specified callbacks
|
|
||||||
m_OnTrigger.Release2();
|
|
||||||
m_OnInclude.Release2();
|
|
||||||
m_OnExclude.Release2();
|
|
||||||
m_OnCleared.Release2();
|
|
||||||
m_OnRelease.Release2();
|
|
||||||
// Release the reference to the specified user data
|
|
||||||
m_Data.Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@ -104,6 +99,19 @@ bool LocalEvent::operator >= (const LocalEvent & o) const noexcept
|
|||||||
return (m_Type >= o.m_Type);
|
return (m_Type >= o.m_Type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void LocalEvent::VMClose() noexcept
|
||||||
|
{
|
||||||
|
// Release the reference to the specified callbacks
|
||||||
|
m_OnTrigger.Release2();
|
||||||
|
m_OnInclude.Release2();
|
||||||
|
m_OnExclude.Release2();
|
||||||
|
m_OnCleared.Release2();
|
||||||
|
m_OnRelease.Release2();
|
||||||
|
// Release the reference to the specified user data
|
||||||
|
m_Data.Release();
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInt32 LocalEvent::Cmp(const LocalEvent & o) const noexcept
|
SQInt32 LocalEvent::Cmp(const LocalEvent & o) const noexcept
|
||||||
{
|
{
|
||||||
|
@ -365,6 +365,11 @@ public:
|
|||||||
return (m_Type == EVT_UNKNOWN || m_Type >= EVT_COUNT);
|
return (m_Type == EVT_UNKNOWN || m_Type >= EVT_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
|
void VMClose() noexcept;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* ...
|
* ...
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user