mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-20 22:30:05 +02:00
Bug834, part 1 - Memory leak and orphans after cancelling any generator
This fixes the first of two related memory leak bugs: New project. Make a new track. Select the track and use any generator, such as white noise, specifying a long enough length that a progress dialog appears. Cancel the progress dialog. Save the project. Exit and restart Audacity. Reopen the project. Orphans!
This commit is contained in:
parent
5b4b3e3c53
commit
a562f2c922
@ -59,21 +59,22 @@ bool Generator::Process()
|
|||||||
if (mDuration > 0.0)
|
if (mDuration > 0.0)
|
||||||
{
|
{
|
||||||
// Create a temporary track
|
// Create a temporary track
|
||||||
WaveTrack *tmp = mFactory->NewWaveTrack(track->GetSampleFormat(),
|
std::auto_ptr<WaveTrack> tmp(
|
||||||
track->GetRate());
|
mFactory->NewWaveTrack(track->GetSampleFormat(),
|
||||||
|
track->GetRate())
|
||||||
|
);
|
||||||
BeforeTrack(*track);
|
BeforeTrack(*track);
|
||||||
BeforeGenerate();
|
BeforeGenerate();
|
||||||
|
|
||||||
// Fill it with data
|
// Fill it with data
|
||||||
if (!GenerateTrack(tmp, *track, ntrack))
|
if (!GenerateTrack(&*tmp, *track, ntrack))
|
||||||
bGoodResult = false;
|
bGoodResult = false;
|
||||||
else {
|
else {
|
||||||
// Transfer the data from the temporary track to the actual one
|
// Transfer the data from the temporary track to the actual one
|
||||||
tmp->Flush();
|
tmp->Flush();
|
||||||
SetTimeWarper(new StepTimeWarper(mT0+mDuration, mDuration-(mT1-mT0)));
|
SetTimeWarper(new StepTimeWarper(mT0+mDuration, mDuration-(mT1-mT0)));
|
||||||
bGoodResult = track->ClearAndPaste(mT0, mT1, tmp, true,
|
bGoodResult = track->ClearAndPaste(mT0, mT1, &*tmp, true,
|
||||||
false, GetTimeWarper());
|
false, GetTimeWarper());
|
||||||
delete tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bGoodResult) {
|
if (!bGoodResult) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user