mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[8719] More early detection possible crash sources at object deletion.
* If object still in world at delete * If object still listed in client update queue Possible with this crash reports will more informative and let find porblem.
This commit is contained in:
parent
d7ae5e3af0
commit
e79aa4dee2
3 changed files with 21 additions and 12 deletions
|
|
@ -79,14 +79,21 @@ Object::Object( ) : m_PackGUID(sizeof(uint64)+1)
|
||||||
|
|
||||||
Object::~Object( )
|
Object::~Object( )
|
||||||
{
|
{
|
||||||
|
if(IsInWorld())
|
||||||
|
{
|
||||||
|
///- Do NOT call RemoveFromWorld here, if the object is a player it will crash
|
||||||
|
sLog.outError("Object::~Object (GUID: %u TypeId: %u) deleted but still in world!!", GetGUIDLow(), GetTypeId());
|
||||||
|
ASSERT(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_objectUpdated)
|
||||||
|
{
|
||||||
|
sLog.outError("Object::~Object (GUID: %u TypeId: %u) deleted but still have updated status!!", GetGUIDLow(), GetTypeId());
|
||||||
|
ASSERT(false);
|
||||||
|
}
|
||||||
|
|
||||||
if(m_uint32Values)
|
if(m_uint32Values)
|
||||||
{
|
{
|
||||||
if(IsInWorld())
|
|
||||||
{
|
|
||||||
///- Do NOT call RemoveFromWorld here, if the object is a player it will crash
|
|
||||||
sLog.outError("Object::~Object (GUID: %u TypeId: %u) deleted but still in world!!", GetGUIDLow(), GetTypeId());
|
|
||||||
//assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//DEBUG_LOG("Object desctr 1 check (%p)",(void*)this);
|
//DEBUG_LOG("Object desctr 1 check (%p)",(void*)this);
|
||||||
delete [] m_uint32Values;
|
delete [] m_uint32Values;
|
||||||
|
|
@ -735,10 +742,13 @@ void Object::BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask *
|
||||||
|
|
||||||
void Object::ClearUpdateMask(bool remove)
|
void Object::ClearUpdateMask(bool remove)
|
||||||
{
|
{
|
||||||
for( uint16 index = 0; index < m_valuesCount; ++index )
|
if(m_uint32Values)
|
||||||
{
|
{
|
||||||
if(m_uint32Values_mirror[index]!= m_uint32Values[index])
|
for( uint16 index = 0; index < m_valuesCount; ++index )
|
||||||
m_uint32Values_mirror[index] = m_uint32Values[index];
|
{
|
||||||
|
if(m_uint32Values_mirror[index]!= m_uint32Values[index])
|
||||||
|
m_uint32Values_mirror[index] = m_uint32Values[index];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_objectUpdated)
|
if(m_objectUpdated)
|
||||||
|
|
|
||||||
|
|
@ -129,8 +129,7 @@ class MANGOS_DLL_SPEC Object
|
||||||
virtual void RemoveFromWorld()
|
virtual void RemoveFromWorld()
|
||||||
{
|
{
|
||||||
// if we remove from world then sending changes not required
|
// if we remove from world then sending changes not required
|
||||||
if(m_uint32Values)
|
ClearUpdateMask(true);
|
||||||
ClearUpdateMask(true);
|
|
||||||
m_inWorld = false;
|
m_inWorld = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8718"
|
#define REVISION_NR "8719"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue