From: Andy D. <kha...@us...> - 2005-01-10 17:07:54
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1507/server Modified Files: advicemanager.cpp advicemanager.h Log Message: Fixed psAdviceSessionTimeoutGameEvent corrupting memory because it wasn't being cancelled when the AdviceSession ended. Index: advicemanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/advicemanager.cpp,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** advicemanager.cpp 10 Jan 2005 16:56:15 -0000 1.30 --- advicemanager.cpp 10 Jan 2005 17:07:43 -0000 1.31 *************** *** 176,253 **** /****************************************************************************/ - class psAdviceRequestTimeoutGameEvent : public psGEMEvent - { - protected: - AdviceManager *advicemanager; - gemActor *adviseeActor; - gemActor *advisorActor; ! public: ! AdviceSession *adviceSession; ! ! psAdviceRequestTimeoutGameEvent( AdviceManager *mgr, ! int delayticks, ! gemActor *advisee, ! AdviceSession *adviceRequest ) ! : psGEMEvent( 0, delayticks, NULL,"psAdviceRequestTimeoutGameEvent" ) ! { ! advicemanager = mgr; ! adviceSession = adviceRequest; ! //Handle dependencies ourselves since we have two. ! adviseeActor = adviceSession->GetAdvisee()->clientptr->GetActor(); ! adviseeActor->Register( this ); ! if ( adviceSession->GetAdvisor() ) ! { ! advisorActor = adviceSession->GetAdvisor()->clientptr->GetActor(); ! advisorActor->Register( this ); ! } ! else advisorActor = NULL; ! }; ! virtual ~psAdviceRequestTimeoutGameEvent() ! { ! if ( adviseeActor != NULL ) adviseeActor->Unregister( this ); ! adviseeActor = NULL; ! if ( advisorActor != NULL ) advisorActor->Unregister( this ); ! advisorActor = NULL; ! } ! virtual void Disconnecting( void * object ) ! { ! gemActor *sender = (gemActor *)object; ! adviceSession->requestEvent = NULL; ! if ( sender == adviseeActor ) ! { ! psGEMEvent::Disconnecting( object ); ! adviseeActor->Unregister( this ); ! if ( advisorActor ) advisorActor->Unregister( this ); ! adviseeActor = advisorActor = NULL; ! return; ! } ! if ( advisorActor ) ! { ! if ( sender == advisorActor ) ! { ! advisorActor->Unregister( this ); ! advisorActor = NULL; ! adviceSession->RemoveAdvisor(); ! advicemanager->AdviceRequestTimeout( adviceSession ); ! } ! } ! } ! virtual void Trigger() ! { ! adviceSession->requestEvent = NULL; ! advicemanager->AdviceRequestTimeout( adviceSession ); ! }; }; /****************************************************************************/ --- 176,244 ---- /****************************************************************************/ ! psAdviceRequestTimeoutGameEvent::psAdviceRequestTimeoutGameEvent( AdviceManager *mgr, ! int delayticks, ! gemActor *advisee, ! AdviceSession *adviceRequest ) ! : psGEMEvent( 0, delayticks, NULL,"psAdviceRequestTimeoutGameEvent" ) ! { ! advicemanager = mgr; ! adviceSession = adviceRequest; ! //Handle dependencies ourselves since we have two. ! adviseeActor = adviceSession->GetAdvisee()->clientptr->GetActor(); ! adviseeActor->Register( this ); ! if ( adviceSession->GetAdvisor() ) ! { ! advisorActor = adviceSession->GetAdvisor()->clientptr->GetActor(); ! advisorActor->Register( this ); ! } ! else advisorActor = NULL; ! }; ! psAdviceRequestTimeoutGameEvent::~psAdviceRequestTimeoutGameEvent() ! { ! if ( adviseeActor != NULL ) adviseeActor->Unregister( this ); ! adviseeActor = NULL; ! if ( advisorActor != NULL ) advisorActor->Unregister( this ); ! advisorActor = NULL; ! } ! void psAdviceRequestTimeoutGameEvent::Disconnecting( void * object ) ! { ! gemActor *sender = (gemActor *)object; ! adviceSession->requestEvent = NULL; ! if ( sender == adviseeActor ) ! { ! psGEMEvent::Disconnecting( object ); ! adviseeActor->Unregister( this ); ! if ( advisorActor ) advisorActor->Unregister( this ); ! adviseeActor = advisorActor = NULL; ! return; ! } ! if ( advisorActor ) ! { ! if ( sender == advisorActor ) ! { ! advisorActor->Unregister( this ); ! advisorActor = NULL; ! adviceSession->RemoveAdvisor(); ! advicemanager->AdviceRequestTimeout( adviceSession ); ! } ! } ! } ! void psAdviceRequestTimeoutGameEvent::Trigger() ! { ! adviceSession->requestEvent = NULL; ! advicemanager->AdviceRequestTimeout( adviceSession ); }; + /****************************************************************************/ Index: advicemanager.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/advicemanager.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** advicemanager.h 10 Jan 2005 12:26:45 -0000 1.9 --- advicemanager.h 10 Jan 2005 17:07:43 -0000 1.10 *************** *** 147,150 **** --- 147,172 ---- }; + class psAdviceRequestTimeoutGameEvent : public psGEMEvent + { + protected: + AdviceManager *advicemanager; + gemActor *adviseeActor; + gemActor *advisorActor; + + public: + AdviceSession *adviceSession; + + psAdviceRequestTimeoutGameEvent( AdviceManager *mgr, + int delayticks, + gemActor *advisee, + AdviceSession *adviceRequest ); + + virtual ~psAdviceRequestTimeoutGameEvent(); + + virtual void Disconnecting( void * object ); + + virtual void Trigger(); + }; + #endif |