free track name/instrument string memory when necessary
[ardour.git] / libs / evoral / src / libsmf / smf.c
index ba805e0b041e563d902f9082fe6dbeb80550b5da..79b355c7dcd439c0d4f9590e1287b570eb04a725 100644 (file)
@@ -133,17 +133,30 @@ smf_track_delete(smf_track_t *track)
        assert(track);
        assert(track->events_array);
 
-       /* Remove all the events, from last to first. */
-       while (track->events_array->len > 0)
-               smf_event_delete((smf_event_t*)g_ptr_array_index(track->events_array, track->events_array->len - 1));
+       /* Remove all the events */
+       unsigned int i;
+       for (i = 0; i < track->events_array->len; ++i) {
+               smf_event_t* ev = (smf_event_t*)g_ptr_array_index(track->events_array, i);
+               free (ev->midi_buffer);
+               free (ev);
+       }
+
+       g_ptr_array_remove_range(track->events_array, 0, track->events_array->len);
+       track->number_of_events = 0;
 
        if (track->smf)
                smf_track_remove_from_smf(track);
 
        assert(track->events_array->len == 0);
-       assert(track->number_of_events == 0);
        g_ptr_array_free(track->events_array, TRUE);
 
+       if (track->name) {
+               free (track->name);
+       }
+       if (track->instrument) {
+               free (track->instrument);
+       }
+
        memset(track, 0, sizeof(smf_track_t));
        free(track);
 }
@@ -155,7 +168,9 @@ smf_track_delete(smf_track_t *track)
 void
 smf_add_track(smf_t *smf, smf_track_t *track)
 {
+#ifndef NDEBUG
        int cantfail;
+#endif
 
        assert(track->smf == NULL);
 
@@ -166,8 +181,13 @@ smf_add_track(smf_t *smf, smf_track_t *track)
        track->track_number = smf->number_of_tracks;
 
        if (smf->number_of_tracks > 1) {
+#ifndef NDEBUG
                cantfail = smf_set_format(smf, 1);
                assert(!cantfail);
+#else
+               smf_set_format(smf, 1);
+#endif
+
        }
 }
 
@@ -864,9 +884,8 @@ smf_get_next_event(smf_t *smf)
 void
 smf_skip_next_event(smf_t *smf)
 {
-       void *notused;
-
-       notused = smf_get_next_event(smf);
+       smf_event_t *ignored = smf_get_next_event(smf);
+       (void) ignored;
 }
 
 /**