From 7097dd15eb3a53e5838272a73ddb960f5c38220c Mon Sep 17 00:00:00 2001 From: chme Date: Sun, 3 May 2015 08:18:26 +0200 Subject: [PATCH] allow removing of listeners --- src/listener.c | 29 +++++++++++++++++++++++++++++ src/listener.h | 3 +++ src/mpd.c | 2 ++ 3 files changed, 34 insertions(+) diff --git a/src/listener.c b/src/listener.c index c653ddc5..0080a804 100644 --- a/src/listener.c +++ b/src/listener.c @@ -45,6 +45,35 @@ listener_add(notify notify_cb) return 0; } +int +listener_remove(notify notify_cb) +{ + struct listener *listener; + struct listener *prev; + + listener = listener_list; + prev = NULL; + + while (listener) + { + if (listener->notify_cb == notify_cb) + { + if (prev) + prev->next = listener->next; + else + listener_list = NULL; + + free(listener); + return 0; + } + + prev = listener; + listener = listener->next; + } + + return -1; +} + int listener_notify(enum listener_event_type type) { diff --git a/src/listener.h b/src/listener.h index 0b7c91ba..94a0c804 100644 --- a/src/listener.h +++ b/src/listener.h @@ -14,6 +14,9 @@ typedef void (*notify)(enum listener_event_type type); int listener_add(notify notify_cb); +int +listener_remove(notify notify_cb); + int listener_notify(enum listener_event_type type); diff --git a/src/mpd.c b/src/mpd.c index 152cc2a3..34950cee 100644 --- a/src/mpd.c +++ b/src/mpd.c @@ -4098,6 +4098,8 @@ void mpd_deinit(void) return; } + listener_remove(mpd_listener_cb); + while (idle_clients) { temp = idle_clients;