X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-evt.c;h=0979db8229c4e4a3bfa2113820eb2fb8663305bc;hb=fbe9349a747aba8d7c8c27e51cdd8c3c5ef8b39c;hp=20ef5e9e2f47e365f062627a101abffd1d29fc52;hpb=11adca199df161b22b7fa387808e987e45e0b2c7;p=src%2Fapp-framework-binder.git diff --git a/src/afb-evt.c b/src/afb-evt.c index 20ef5e9e..0979db82 100644 --- a/src/afb-evt.c +++ b/src/afb-evt.c @@ -179,9 +179,10 @@ int afb_evt_broadcast(const char *event, struct json_object *object) /* * Pushes the event 'evt' with 'obj' to its listeners * 'obj' is released (like json_object_put) + * calls hooks if hookflags isn't 0 * Returns the count of listener taht received the event. */ -static int evt_push(struct afb_evt_event *evt, struct json_object *obj) +static int push(struct afb_evt_event *evt, struct json_object *obj, int hookflags) { int result; struct afb_evt_watch *watch; @@ -189,7 +190,7 @@ static int evt_push(struct afb_evt_event *evt, struct json_object *obj) result = 0; pthread_mutex_lock(&evt->mutex); - if (evt->hookflags & afb_hook_flag_evt_push_before) + if (hookflags & afb_hook_flag_evt_push_before) afb_hook_evt_push_before(evt->name, evt->id, obj); watch = evt->watchs; while(watch) { @@ -201,13 +202,23 @@ static int evt_push(struct afb_evt_event *evt, struct json_object *obj) } watch = watch->next_by_event; } - if (evt->hookflags & afb_hook_flag_evt_push_after) + if (hookflags & afb_hook_flag_evt_push_after) afb_hook_evt_push_after(evt->name, evt->id, obj, result); pthread_mutex_unlock(&evt->mutex); json_object_put(obj); return result; } +/* + * Pushes the event 'evt' with 'obj' to its listeners + * 'obj' is released (like json_object_put) + * Returns the count of listener taht received the event. + */ +static int evt_push(struct afb_evt_event *evt, struct json_object *obj) +{ + return push(evt, obj, evt->hookflags); +} + /* * Returns the name associated to the event 'evt'. */ @@ -544,3 +555,19 @@ void afb_evt_update_hooks() pthread_mutex_unlock(&events_mutex); } +int afb_evt_push(struct afb_event event, struct json_object *object) +{ + if (event.itf == &afb_evt_event_itf) + return evt_push((struct afb_evt_event *)event.closure, object); + json_object_put(object); + return 0; +} + +int afb_evt_unhooked_push(struct afb_event event, struct json_object *object) +{ + if (event.itf == &afb_evt_event_itf) + return push((struct afb_evt_event *)event.closure, object, 0); + json_object_put(object); + return 0; +} +