mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-19 14:17:41 +02:00
Consistently use delete[] not free for NoteTrack serialization...
... Because allocation is with new[], if you search for where it happens in lib-src.
This commit is contained in:
parent
7dbb946d29
commit
509f974dfb
@ -110,7 +110,6 @@ Track(projDirManager)
|
||||
SetName(GetDefaultName());
|
||||
|
||||
mSeq = NULL;
|
||||
mSerializationBuffer = NULL;
|
||||
mSerializationLength = 0;
|
||||
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
@ -125,9 +124,6 @@ Track(projDirManager)
|
||||
|
||||
NoteTrack::~NoteTrack()
|
||||
{
|
||||
if (mSerializationBuffer) {
|
||||
delete [] mSerializationBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
Track::Holder NoteTrack::Duplicate() const
|
||||
@ -143,13 +139,15 @@ Track::Holder NoteTrack::Duplicate() const
|
||||
SonifyBeginSerialize();
|
||||
assert(!mSerializationBuffer);
|
||||
// serialize from this to duplicate's mSerializationBuffer
|
||||
mSeq->serialize((void**)&duplicate->mSerializationBuffer,
|
||||
void *buffer;
|
||||
mSeq->serialize(&buffer,
|
||||
&duplicate->mSerializationLength);
|
||||
duplicate->mSerializationBuffer.reset( (char*)buffer );
|
||||
SonifyEndSerialize();
|
||||
} else if (mSerializationBuffer) {
|
||||
SonifyBeginUnserialize();
|
||||
assert(!mSeq);
|
||||
std::unique_ptr<Alg_track> alg_track{ Alg_seq::unserialize(mSerializationBuffer,
|
||||
std::unique_ptr<Alg_track> alg_track{ Alg_seq::unserialize(mSerializationBuffer.get(),
|
||||
mSerializationLength) };
|
||||
assert(alg_track->get_type() == 's');
|
||||
duplicate->mSeq.reset(static_cast<Alg_seq*>(alg_track.release()));
|
||||
@ -198,9 +196,8 @@ void NoteTrack::WarpAndTransposeNotes(double t0, double t1,
|
||||
const auto nt = static_cast<NoteTrack*>(unt.get());
|
||||
wxASSERT(!mSeq && nt->mSeq && !nt->mSerializationBuffer);
|
||||
// swap mSeq and Buffer between this and nt
|
||||
nt->mSerializationBuffer = mSerializationBuffer;
|
||||
nt->mSerializationBuffer = std::move(mSerializationBuffer);
|
||||
nt->mSerializationLength = mSerializationLength;
|
||||
mSerializationBuffer = NULL;
|
||||
mSerializationLength = 0;
|
||||
mSeq = std::move(nt->mSeq);
|
||||
}
|
||||
|
@ -198,7 +198,7 @@ class AUDACITY_DLL_API NoteTrack final : public Track {
|
||||
// mSeq variable. (TrackArtist should check to make sure this
|
||||
// flip-flop from mSeq to mSerializationBuffer happened an
|
||||
// even number of times, otherwise mSeq will be NULL).
|
||||
mutable char *mSerializationBuffer; // NULL means no buffer
|
||||
mutable std::unique_ptr<char[]> mSerializationBuffer; // NULL means no buffer
|
||||
long mSerializationLength;
|
||||
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
|
@ -2829,12 +2829,11 @@ void TrackArtist::DrawNoteTrack(const NoteTrack *track,
|
||||
// JKC: Previously this indirected via seq->, a NULL pointer.
|
||||
// This was actually OK, since unserialize is a static function.
|
||||
// Alg_seq:: is clearer.
|
||||
std::unique_ptr<Alg_track> alg_track{ Alg_seq::unserialize(track->mSerializationBuffer,
|
||||
std::unique_ptr<Alg_track> alg_track{ Alg_seq::unserialize(track->mSerializationBuffer.get(),
|
||||
track->mSerializationLength) };
|
||||
assert(alg_track->get_type() == 's');
|
||||
const_cast<NoteTrack*>(track)->mSeq.reset(seq = static_cast<Alg_seq*>(alg_track.release()));
|
||||
free(track->mSerializationBuffer);
|
||||
track->mSerializationBuffer = NULL;
|
||||
track->mSerializationBuffer.reset();
|
||||
}
|
||||
assert(seq);
|
||||
int visibleChannels = track->mVisibleChannels;
|
||||
|
Loading…
x
Reference in New Issue
Block a user