Skip to content

Commit

Permalink
Server crash fix test
Browse files Browse the repository at this point in the history
  • Loading branch information
ccw808 committed May 26, 2017
1 parent eddacab commit bcf4162
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
30 changes: 29 additions & 1 deletion Server/mods/deathmatch/logic/CElement.cpp
Expand Up @@ -464,7 +464,10 @@ bool CElement::CallEvent ( const char* szName, const CLuaArguments& Arguments, C
CallParentEvent ( szName, Arguments, this, pCaller );

// Call it on all our children
CallEventNoParent ( szName, Arguments, this, pCaller );
if ( g_pGame->GetConfig()->IsEnableDiagnostic("CallEvent") )
CallEventNoParentSlow ( szName, Arguments, this, pCaller );
else
CallEventNoParent ( szName, Arguments, this, pCaller );

// Tell the event manager that we're done calling the event
pEvents->PostEventPulse ();
Expand Down Expand Up @@ -1068,6 +1071,31 @@ void CElement::CallEventNoParent ( const char* szName, const CLuaArguments& Argu
}


void CElement::CallEventNoParentSlow ( const char* szName, const CLuaArguments& Arguments, CElement* pSource, CPlayer* pCaller )
{
// Call it on us if this isn't the same class it was raised on
if ( pSource != this && m_pEventManager->HasEvents () )
{
m_pEventManager->Call ( szName, Arguments, pSource, this, pCaller );
}

// Call it on all our children
CChildListType childrenCopy = m_Children;
CChildListType ::const_iterator iter = childrenCopy.begin ();
for ( ; iter != childrenCopy.end (); iter++ )
{
CElement* pElement = *iter;

if ( !pElement->m_pEventManager || pElement->m_pEventManager->HasEvents () || !pElement->m_Children.empty () )
{
pElement->CallEventNoParentSlow ( szName, Arguments, pSource, pCaller );
if ( m_bIsBeingDeleted )
break;
}
}
}


void CElement::CallParentEvent ( const char* szName, const CLuaArguments& Arguments, CElement* pSource, CPlayer* pCaller )
{
// Call the event on us
Expand Down
1 change: 1 addition & 0 deletions Server/mods/deathmatch/logic/CElement.h
Expand Up @@ -239,6 +239,7 @@ class CElement
void FindAllChildrenByTypeIndex ( unsigned int uiTypeHash, lua_State* pLua, unsigned int& uiIndex );

void CallEventNoParent ( const char* szName, const CLuaArguments& Arguments, CElement* pSource, CPlayer* pCaller = NULL );
void CallEventNoParentSlow ( const char* szName, const CLuaArguments& Arguments, CElement* pSource, CPlayer* pCaller = NULL );
void CallParentEvent ( const char* szName, const CLuaArguments& Arguments, CElement* pSource, CPlayer* pCaller = NULL );


Expand Down

0 comments on commit bcf4162

Please sign in to comment.