X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-subcall.c;h=498f73b585aed9b05221dd1fe93c3fdd15aa5bf0;hb=03f863dd080d32f71c4a0755c02e23c72e4cb342;hp=b586e28a71555a9f04aadbb73ddf30a1ed54f90c;hpb=7effe02be236921437fb77d8fbeb21eb62e35939;p=src%2Fapp-framework-binder.git diff --git a/src/afb-subcall.c b/src/afb-subcall.c index b586e28a..498f73b5 100644 --- a/src/afb-subcall.c +++ b/src/afb-subcall.c @@ -33,10 +33,10 @@ struct subcall; -static void subcall_destroy(void *closure); -static void subcall_reply(void *closure, int iserror, struct json_object *obj); -static int subcall_subscribe(void *closure, struct afb_event event); -static int subcall_unsubscribe(void *closure, struct afb_event event); +static void subcall_destroy(struct afb_xreq *xreq); +static void subcall_reply(struct afb_xreq *xreq, int iserror, struct json_object *obj); +static int subcall_subscribe(struct afb_xreq *xreq, struct afb_event event); +static int subcall_unsubscribe(struct afb_xreq *xreq, struct afb_event event); const struct afb_xreq_query_itf afb_subcall_xreq_itf = { .reply = subcall_reply, @@ -53,33 +53,33 @@ struct subcall void *closure; }; -static void subcall_destroy(void *closure) +static void subcall_destroy(struct afb_xreq *xreq) { - struct subcall *subcall = closure; + struct subcall *subcall = CONTAINER_OF_XREQ(struct subcall, xreq); json_object_put(subcall->xreq.json); afb_xreq_unref(subcall->caller); free(subcall); } -static void subcall_reply(void *closure, int iserror, struct json_object *obj) +static void subcall_reply(struct afb_xreq *xreq, int iserror, struct json_object *obj) { - struct subcall *subcall = closure; + struct subcall *subcall = CONTAINER_OF_XREQ(struct subcall, xreq); subcall->callback(subcall->closure, iserror, obj); json_object_put(obj); } -static int subcall_subscribe(void *closure, struct afb_event event) +static int subcall_subscribe(struct afb_xreq *xreq, struct afb_event event) { - struct subcall *subcall = closure; + struct subcall *subcall = CONTAINER_OF_XREQ(struct subcall, xreq); return afb_xreq_subscribe(subcall->caller, event); } -static int subcall_unsubscribe(void *closure, struct afb_event event) +static int subcall_unsubscribe(struct afb_xreq *xreq, struct afb_event event) { - struct subcall *subcall = closure; + struct subcall *subcall = CONTAINER_OF_XREQ(struct subcall, xreq); return afb_xreq_unsubscribe(subcall->caller, event); } @@ -93,13 +93,11 @@ static struct subcall *create_subcall(struct afb_xreq *caller, const char *api, return NULL; } + afb_xreq_init(&subcall->xreq, &afb_subcall_xreq_itf); afb_context_subinit(&subcall->xreq.context, &caller->context); - subcall->xreq.refcount = 1; subcall->xreq.json = args; subcall->xreq.api = api; /* TODO: alloc ? */ subcall->xreq.verb = verb; /* TODO: alloc ? */ - subcall->xreq.query = subcall; - subcall->xreq.queryitf = &afb_subcall_xreq_itf; subcall->caller = caller; subcall->callback = callback; subcall->closure = closure; @@ -164,7 +162,7 @@ static void subcall_sync_enter(int signum, void *closure, struct jobloop *jobloo if (!signum) { sync->jobloop = jobloop; - afb_xreq_subcall(sync->caller, sync->api, sync->verb, sync->args, subcall_sync_reply, sync); + afb_xreq_unhooked_subcall(sync->caller, sync->api, sync->verb, sync->args, subcall_sync_reply, sync); } else { sync->result = json_object_get(afb_msg_json_internal_error()); sync->iserror = 1;