diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-08-31 19:21:03 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-08-31 19:21:03 +0200 |
commit | 46ac3bf9554a75e137d5209d27160c1137d42302 (patch) | |
tree | fcf54e895a67c93274137cde3f7a1ab529af64c3 /src/afb-api-so-v2.c | |
parent | 2e83db0375d44c0b05742e787f6abd4127e2aac8 (diff) |
Make noconcurrency more efficient
The previous handling of noconcurrency suffered of
inefficiency, was complicated and dedicated to
api-so-v2.
Change-Id: I32aea9187663ac533819496e9dc9b944db0d89ec
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-api-so-v2.c')
-rw-r--r-- | src/afb-api-so-v2.c | 37 |
1 files changed, 2 insertions, 35 deletions
diff --git a/src/afb-api-so-v2.c b/src/afb-api-so-v2.c index 038f1ce2..871be524 100644 --- a/src/afb-api-so-v2.c +++ b/src/afb-api-so-v2.c @@ -76,31 +76,6 @@ static void call_cb(void *closure, struct afb_xreq *xreq) afb_xreq_call_verb_v2(xreq, verb); } -struct call_sync -{ - struct api_so_v2 *desc; - struct afb_xreq *xreq; -}; - -static void call_sync_cb_cb(int signum, void *closure) -{ - struct call_sync *cs = closure; - if (!signum) - call_cb(cs->desc, cs->xreq); - else { - if (!cs->xreq->replied) - afb_xreq_fail(cs->xreq, "aborted", "internal error"); - } -} - -static void call_sync_cb(void *closure, struct afb_xreq *xreq) -{ - struct call_sync cs = { .desc = closure, .xreq = xreq }; - - if (jobs_call(closure, 0, call_sync_cb_cb, &cs)) - call_cb(closure, xreq); -} - static int service_start_cb(void *closure, int share_session, int onneed, struct afb_apiset *apiset) { int rc; @@ -280,15 +255,6 @@ static struct afb_api_itf so_v2_api_itf = { .describe = describe_cb }; -static struct afb_api_itf so_v2_sync_api_itf = { - .call = call_sync_cb, - .service_start = service_start_cb, - .update_hooks = update_hooks_cb, - .get_verbosity = get_verbosity_cb, - .set_verbosity = set_verbosity_cb, - .describe = describe_cb -}; - int afb_api_so_v2_add_binding(const struct afb_binding_v2 *binding, void *handle, struct afb_apiset *apiset, struct afb_binding_data_v2 *data) { int rc; @@ -328,7 +294,8 @@ int afb_api_so_v2_add_binding(const struct afb_binding_v2 *binding, void *handle /* records the binding */ afb_api.closure = desc; - afb_api.itf = binding->noconcurrency ? &so_v2_sync_api_itf : &so_v2_api_itf; + afb_api.itf = &so_v2_api_itf; + afb_api.noconcurrency = binding->noconcurrency; if (afb_apiset_add(apiset, binding->api, afb_api) < 0) { ERROR("binding %s can't be registered to set %s...", binding->api, afb_apiset_name(apiset)); goto error2; |