1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-30 23:49:28 +02:00

Use RAII idiom for lock and locking mutex in Sequence

This commit is contained in:
Paul Licameli 2016-02-03 12:58:30 -05:00
parent 13f7d0a81b
commit 6c28276daf
3 changed files with 17 additions and 5 deletions

View File

@ -1622,7 +1622,7 @@ bool Sequence::Delete(sampleCount start, sampleCount len)
//TODO: add a ref-deref mechanism to SeqBlock/BlockArray so we don't have to make this a critical section.
//On-demand threads iterate over the mBlocks and the GUI thread deletes them, so for now put a mutex here over
//both functions,
LockDeleteUpdateMutex();
DeleteUpdateMutexLocker locker(*this);
unsigned int numBlocks = mBlock.size();
@ -1661,7 +1661,6 @@ bool Sequence::Delete(sampleCount start, sampleCount len)
mDirManager->Deref(oldFile);
mNumSamples -= len;
UnlockDeleteUpdateMutex();
return ConsistencyCheck(wxT("Delete - branch one"));
}
@ -1786,7 +1785,6 @@ bool Sequence::Delete(sampleCount start, sampleCount len)
// Update total number of samples and do a consistency check.
mNumSamples -= len;
UnlockDeleteUpdateMutex();
return ConsistencyCheck(wxT("Delete - branch two"));
}

View File

@ -194,6 +194,21 @@ class Sequence: public XMLTagHandler {
void LockDeleteUpdateMutex(){mDeleteUpdateMutex.Lock();}
void UnlockDeleteUpdateMutex(){mDeleteUpdateMutex.Unlock();}
// RAII idiom wrapping the functions above
struct DeleteUpdateMutexLocker {
DeleteUpdateMutexLocker(Sequence &sequence)
: mSequence(sequence)
{
mSequence.LockDeleteUpdateMutex();
}
~DeleteUpdateMutexLocker()
{
mSequence.UnlockDeleteUpdateMutex();
}
private:
Sequence &mSequence;
};
private:
//

View File

@ -190,7 +190,7 @@ void ODComputeSummaryTask::Update()
seq = clip->GetSequence();
//This lock may be way too big since the whole file is one sequence.
//TODO: test for large files and find a way to break it down.
seq->LockDeleteUpdateMutex();
Sequence::DeleteUpdateMutexLocker locker(*seq);
//See Sequence::Delete() for why need this for now..
//We don't need the mBlockFilesMutex here because it is only for the vector list.
@ -223,7 +223,6 @@ void ODComputeSummaryTask::Update()
tempBlocks.insert(tempBlocks.begin() + insertCursor++, odpcmaFile);
}
}
seq->UnlockDeleteUpdateMutex();
node = node->GetNext();
}
}