13
0

change logic for memory management when adding tempo,meter,bartime points

Because a bartime point IS-A tempo point and IS-A meter point, we cannot just delete the tempo
point passed into core_add_tempo() if the new point replaces an existing one. Ditto for meter.

So, leave that logic up to the caller
This commit is contained in:
Paul Davis 2022-05-29 15:01:54 -06:00
parent 25c151bd8d
commit 710cca9ccf

View File

@ -775,6 +775,8 @@ TempoMap::add_meter (MeterPoint* mp)
if (!replaced) { if (!replaced) {
core_add_point (mp); core_add_point (mp);
} else {
delete mp;
} }
reset_starting_at (ret->sclock()); reset_starting_at (ret->sclock());
@ -871,7 +873,7 @@ TempoMap::core_add_tempo (TempoPoint* tp, bool& replaced)
if (t->sclock() == sclock_limit) { if (t->sclock() == sclock_limit) {
/* overwrite Tempo part of this point */ /* overwrite Tempo part of this point */
*((Tempo*)&(*t)) = *tp; *((Tempo*)&(*t)) = *tp;
delete tp; /* caller must delete tp when replaced is true */
DEBUG_TRACE (DEBUG::TemporalMap, string_compose ("overwrote old tempo with %1\n", *tp)); DEBUG_TRACE (DEBUG::TemporalMap, string_compose ("overwrote old tempo with %1\n", *tp));
replaced = true; replaced = true;
return &(*t); return &(*t);
@ -897,7 +899,7 @@ TempoMap::core_add_meter (MeterPoint* mp, bool& replaced)
if (m->sclock() == sclock_limit) { if (m->sclock() == sclock_limit) {
/* overwrite Meter part of this point */ /* overwrite Meter part of this point */
*((Meter*)&(*m)) = *mp; *((Meter*)&(*m)) = *mp;
delete mp; /* caller must delete mp when replaced is true */
replaced = true; replaced = true;
return &(*m); return &(*m);
} }
@ -919,7 +921,7 @@ TempoMap::core_add_bartime (MusicTimePoint* mtp, bool& replaced)
if (m->sclock() == sclock_limit) { if (m->sclock() == sclock_limit) {
/* overwrite Tempo part of this point */ /* overwrite Tempo part of this point */
*m = *mtp; *m = *mtp;
delete mtp; /* caller must delete mtp when replaced is true */
DEBUG_TRACE (DEBUG::TemporalMap, string_compose ("overwrote old bartime with %1\n", mtp)); DEBUG_TRACE (DEBUG::TemporalMap, string_compose ("overwrote old bartime with %1\n", mtp));
replaced = true; replaced = true;
return &(*m); return &(*m);
@ -940,7 +942,10 @@ TempoMap::add_tempo (TempoPoint * tp)
if (!replaced) { if (!replaced) {
core_add_point (tp); core_add_point (tp);
} else {
delete tp;
} }
reset_starting_at (ret->sclock()); reset_starting_at (ret->sclock());
return ret; return ret;
} }
@ -1035,6 +1040,8 @@ TempoMap::add_or_replace_bartime (MusicTimePoint* mtp)
(void) core_add_meter (mtp, ignore); (void) core_add_meter (mtp, ignore);
core_add_point (mtp); core_add_point (mtp);
dump (std::cerr); dump (std::cerr);
} else {
delete mtp;
} }
reset_starting_at (ret->sclock()); reset_starting_at (ret->sclock());