diff --git a/include/pattern.h b/include/pattern.h index 2f86f98bb..7e5f92f48 100644 --- a/include/pattern.h +++ b/include/pattern.h @@ -139,6 +139,11 @@ public: return( m_frozenPattern != NULL ); } + sampleBuffer * getFrozenPattern( void ) + { + return( m_frozenPattern ); + } + // if channel-track recognizes that this pattern is frozen, it calls // this instead of playing all the notes void FASTCALL playFrozenData( sampleFrame * _ab, diff --git a/src/tracks/pattern.cpp b/src/tracks/pattern.cpp index 47fba394c..635bcb40a 100644 --- a/src/tracks/pattern.cpp +++ b/src/tracks/pattern.cpp @@ -147,7 +147,10 @@ pattern::~pattern() m_notes.clear(); m_frozenPatternMutex.lock(); - delete m_frozenPattern; + if( m_frozenPattern ) + { + sharedObject::unref( m_frozenPattern ); + } m_frozenPatternMutex.unlock(); } @@ -396,6 +399,7 @@ void pattern::checkType( void ) +//TODO: remove this method, check mutex void pattern::playFrozenData( sampleFrame * _ab, const f_cnt_t _start_frame, const fpab_t _frames ) { @@ -608,7 +612,7 @@ void pattern::unfreeze( void ) if( m_frozenPattern != NULL ) { m_frozenPatternMutex.lock(); - delete m_frozenPattern; + sharedObject::unref( m_frozenPattern ); m_frozenPattern = NULL; m_frozenPatternMutex.unlock(); update();