From 9eb56fc592c6e2c305a0fbcc69499271ac034236 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Thu, 18 May 2017 16:57:12 +0200 Subject: [PATCH] Fix a bug in subscribers counting MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit To avoid as much as possible allocation/deallocation when possible sequences of subscribe/unsubscribe are encountered, the watch strucutre of events is destroyed only when either the event or the client is destroyed. This commit fixes a bad handling in the count of active subscribers. Change-Id: I3f240e69c3b21356ff07f584fe9bfb578d46732b Signed-off-by: José Bollo --- src/afb-evt.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/afb-evt.c b/src/afb-evt.c index 88b6d603..7b7ce4f3 100644 --- a/src/afb-evt.c +++ b/src/afb-evt.c @@ -28,6 +28,7 @@ #include #include "afb-evt.h" +#include "verbose.h" struct afb_evt_watch; @@ -173,10 +174,11 @@ static int evt_push(struct afb_evt_event *evt, struct json_object *obj) while(watch) { listener = watch->listener; assert(listener->itf->push != NULL); - if (watch->activity != 0) + if (watch->activity != 0) { listener->itf->push(listener->closure, evt->name, evt->id, json_object_get(obj)); + result++; + } watch = watch->next_by_event; - result++; } pthread_mutex_unlock(&evt->mutex); json_object_put(obj); @@ -480,7 +482,6 @@ int afb_evt_remove_watch(struct afb_evt_listener *listener, struct afb_event eve watch = listener->watchs; while(watch != NULL) { if (watch->event == evt) { - /* found: remove it */ if (watch->activity != 0) { watch->activity--; if (watch->activity == 0 && listener->itf->remove != NULL) -- 2.16.6