From 3db58145f18385f0af8e2cd7cfdb2c47e7ae87fb Mon Sep 17 00:00:00 2001 From: Alexandre Janniaux Date: Mon, 10 Jul 2023 01:15:05 +0200 Subject: [PATCH] dbus: dbus: delete event on error When a second tracklist (append or remove) event was queued to the dbus thread, it detected that an existing event was already there and discarded the event without destroying it, despite the ownership being transferred. By checking whether the event was transferred or not and release it if not, we don't risk leaking the event structures and the underlying items hold by them. No functional changes since those events were not discarded anymore. --- modules/control/dbus/dbus.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/control/dbus/dbus.c b/modules/control/dbus/dbus.c index c92266acf7..8e2b62b33d 100644 --- a/modules/control/dbus/dbus.c +++ b/modules/control/dbus/dbus.c @@ -1071,9 +1071,11 @@ playlist_on_items_added(vlc_playlist_t *playlist, size_t index, void *data) { tracklist_append_event_t *append_event = tracklist_append_event_create(index, items, count); - add_event_signal(data, + bool added = add_event_signal(data, &(callback_info_t){ .signal = SIGNAL_PLAYLIST_ITEM_APPEND, .items_appended = append_event }); + if (!added) + tracklist_append_event_destroy(append_event); (void) playlist; } @@ -1082,9 +1084,11 @@ playlist_on_items_removed(vlc_playlist_t *playlist, size_t index, size_t count, void *data) { tracklist_remove_event_t *remove_event = tracklist_remove_event_create(index, count); - add_event_signal(data, + bool added = add_event_signal(data, &(callback_info_t){ .signal = SIGNAL_PLAYLIST_ITEM_DELETED, .items_removed = remove_event }); + if (!added) + tracklist_remove_event_destroy(remove_event); (void) playlist; }