- /* 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 */
+ for (unsigned int i=0; i < track->events_array->len; ++i) {
+ smf_event_t* ev = 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;