Merge pull request #966 from diizy/stable-1.1

ProjectJournal: cap the number of undo states to prevent infinite memory...
This commit is contained in:
Vesa V
2014-07-10 14:25:44 +03:00
2 changed files with 11 additions and 4 deletions

View File

@@ -22,8 +22,8 @@
*
*/
#ifndef _PROJECT_JOURNAL_H
#define _PROJECT_JOURNAL_H
#ifndef PROJECT_JOURNAL_H
#define PROJECT_JOURNAL_H
#include <QtCore/QHash>
#include <QtCore/QStack>
@@ -37,6 +37,8 @@ class JournallingObject;
class ProjectJournal
{
public:
static const int MAX_UNDO_STATES;
ProjectJournal();
virtual ~ProjectJournal();
@@ -88,7 +90,7 @@ private:
struct CheckPoint
{
CheckPoint( jo_id_t initID = 0, const DataFile&initData = DataFile( DataFile::JournalData ) ) :
CheckPoint( jo_id_t initID = 0, const DataFile& initData = DataFile( DataFile::JournalData ) ) :
joID( initID ),
data( initData )
{

View File

@@ -29,6 +29,7 @@
#include "JournallingObject.h"
#include "song.h"
const int ProjectJournal::MAX_UNDO_STATES = 100; // TODO: make this configurable in settings
ProjectJournal::ProjectJournal() :
m_joIDs(),
@@ -109,6 +110,10 @@ void ProjectJournal::addJournalCheckPoint( JournallingObject *jo )
jo->saveState( dataFile, dataFile.content() );
m_undoCheckPoints.push( CheckPoint( jo->id(), dataFile ) );
if( m_undoCheckPoints.size() > MAX_UNDO_STATES )
{
m_undoCheckPoints.remove( 0, m_undoCheckPoints.size() - MAX_UNDO_STATES );
}
}
}
@@ -120,7 +125,7 @@ jo_id_t ProjectJournal::allocID( JournallingObject * _obj )
const jo_id_t EO_ID_MAX = (1 << 23)-1;
jo_id_t id;
while( m_joIDs.contains( id =
static_cast<jo_id_t>( (jo_id_t)rand()*(jo_id_t)rand() %
static_cast<jo_id_t>( (jo_id_t)rand()*(jo_id_t)rand() %
EO_ID_MAX ) ) )
{
}