fix memory leak in TimingData, remove unnecessary structure copies in ScoreKeeperNormal
This commit is contained in:
@@ -461,7 +461,7 @@ void ScoreKeeperNormal::HandleComboInternal( int iNumHitContinueCombo, int iNumH
|
|||||||
{
|
{
|
||||||
m_pPlayerStageStats->m_iCurMissCombo = 0;
|
m_pPlayerStageStats->m_iCurMissCombo = 0;
|
||||||
}
|
}
|
||||||
TimingData td = GAMESTATE->m_pCurSteps[m_pPlayerState->m_PlayerNumber]->m_Timing;
|
TimingData &td = GAMESTATE->m_pCurSteps[m_pPlayerState->m_PlayerNumber]->m_Timing;
|
||||||
if( iNumBreakCombo == 0 )
|
if( iNumBreakCombo == 0 )
|
||||||
{
|
{
|
||||||
int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow( iRow )->GetCombo() );
|
int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow( iRow )->GetCombo() );
|
||||||
@@ -481,7 +481,7 @@ void ScoreKeeperNormal::HandleRowComboInternal( TapNoteScore tns, int iNumTapsIn
|
|||||||
{
|
{
|
||||||
iNumTapsInRow = min( iNumTapsInRow, 1);
|
iNumTapsInRow = min( iNumTapsInRow, 1);
|
||||||
}
|
}
|
||||||
TimingData td = GAMESTATE->m_pCurSteps[m_pPlayerState->m_PlayerNumber]->m_Timing;
|
TimingData &td = GAMESTATE->m_pCurSteps[m_pPlayerState->m_PlayerNumber]->m_Timing;
|
||||||
if ( tns >= m_MinScoreToContinueCombo )
|
if ( tns >= m_MinScoreToContinueCombo )
|
||||||
{
|
{
|
||||||
m_pPlayerStageStats->m_iCurMissCombo = 0;
|
m_pPlayerStageStats->m_iCurMissCombo = 0;
|
||||||
|
|||||||
+27
-6
@@ -11,20 +11,41 @@ TimingData::TimingData(float fOffset) : m_fBeat0OffsetInSeconds(fOffset)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
TimingData::~TimingData()
|
void TimingData::Copy( const TimingData& cpy )
|
||||||
|
{
|
||||||
|
/* de-allocate any old pointers we had */
|
||||||
|
Clear();
|
||||||
|
|
||||||
|
m_fBeat0OffsetInSeconds = cpy.m_fBeat0OffsetInSeconds;
|
||||||
|
m_sFile = cpy.m_sFile;
|
||||||
|
|
||||||
|
FOREACH_TimingSegmentType( tst )
|
||||||
|
{
|
||||||
|
const vector<TimingSegment*> vpSegs = cpy.m_avpTimingSegments[tst];
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < vpSegs.size(); ++i )
|
||||||
|
AddSegment( vpSegs[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TimingData::Clear()
|
||||||
{
|
{
|
||||||
// This is causing weird crashes, probably due to someone hanging onto pointers
|
|
||||||
// for too long. Commenting this out until we can track it down... -- vyhd
|
|
||||||
#if 0
|
|
||||||
/* Delete all pointers owned by this TimingData. */
|
/* Delete all pointers owned by this TimingData. */
|
||||||
FOREACH_TimingSegmentType( tst )
|
FOREACH_TimingSegmentType( tst )
|
||||||
{
|
{
|
||||||
vector<TimingSegment*> &vSegs = m_avpTimingSegments[tst];
|
vector<TimingSegment*> &vSegs = m_avpTimingSegments[tst];
|
||||||
for( unsigned i = 0; i < vSegs.size(); ++i )
|
for( unsigned i = 0; i < vSegs.size(); ++i )
|
||||||
delete vSegs[i];
|
{
|
||||||
|
LOG->Trace( "deleting %p", vSegs[i] );
|
||||||
|
SAFE_DELETE( vSegs[i] ); }
|
||||||
|
|
||||||
vSegs.clear();
|
vSegs.clear();
|
||||||
}
|
}
|
||||||
#endif
|
}
|
||||||
|
|
||||||
|
TimingData::~TimingData()
|
||||||
|
{
|
||||||
|
Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TimingData::empty() const
|
bool TimingData::empty() const
|
||||||
|
|||||||
+4
-9
@@ -65,16 +65,11 @@ public:
|
|||||||
TimingData( float fOffset = 0 );
|
TimingData( float fOffset = 0 );
|
||||||
~TimingData();
|
~TimingData();
|
||||||
|
|
||||||
TimingData( const TimingData& rhs ) : m_sFile(rhs.m_sFile),
|
void Copy( const TimingData &other );
|
||||||
m_fBeat0OffsetInSeconds(rhs.m_fBeat0OffsetInSeconds)
|
void Clear();
|
||||||
{
|
|
||||||
const vector<TimingSegment*>* avpSegs = rhs.m_avpTimingSegments;
|
|
||||||
|
|
||||||
// deep-copy the TimingSegment pointers
|
TimingData( const TimingData &cpy ) { Copy(cpy); }
|
||||||
FOREACH_TimingSegmentType( tst )
|
TimingData& operator=( const TimingData &cpy ) { Copy(cpy); return *this; }
|
||||||
for( unsigned i = 0; i < avpSegs[tst].size(); ++i )
|
|
||||||
m_avpTimingSegments[tst].push_back( avpSegs[tst][i]->Copy() );
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetSegmentIndexAtRow(TimingSegmentType tst, int row) const;
|
int GetSegmentIndexAtRow(TimingSegmentType tst, int row) const;
|
||||||
int GetSegmentIndexAtBeat(TimingSegmentType tst, float beat) const
|
int GetSegmentIndexAtBeat(TimingSegmentType tst, float beat) const
|
||||||
|
|||||||
Reference in New Issue
Block a user