diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-08-31 09:30:19 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-08-31 09:30:19 +0200 |
commit | 11e2d4395056c7bd2a618b4fa7ffdd70af05d14e (patch) | |
tree | 12088d06154a0f5f27b77a7eef2c131173964877 /src/afb-api-so-v1.c | |
parent | bfffa28ba0483b49770326c4f567950ea80d0fb6 (diff) |
afb-svc: make service existing during its initialisation
The initialisation of services is splitted in two parts:
- the creation and allocation of the structure for the
service.
- the initialisation once the structure is ready and
recorded.
Change-Id: I05c89fb513869d45e6b8413699fba234f00ce6b1
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-api-so-v1.c')
-rw-r--r-- | src/afb-api-so-v1.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/afb-api-so-v1.c b/src/afb-api-so-v1.c index 7e987c22..3eea4645 100644 --- a/src/afb-api-so-v1.c +++ b/src/afb-api-so-v1.c @@ -78,6 +78,7 @@ static void call_cb(void *closure, struct afb_xreq *xreq) static int service_start_cb(void *closure, int share_session, int onneed, struct afb_apiset *apiset) { + int rc; int (*init)(struct afb_service service); void (*onevent)(const char *event, struct json_object *object); @@ -108,13 +109,22 @@ static int service_start_cb(void *closure, int share_session, int onneed, struct } /* get the event handler if any */ - desc->service = afb_svc_create_v1(desc->binding->v1.prefix, apiset, share_session, init, onevent); + desc->service = afb_svc_create(desc->binding->v1.prefix, apiset, share_session, onevent, NULL); if (desc->service == NULL) { - /* starting error */ - ERROR("Starting service %s failed", desc->binding->v1.prefix); + ERROR("Creation of service %s failed", desc->binding->v1.prefix); return -1; } + /* Starts the service */ + rc = afb_svc_start_v1(desc->service, init); + if (rc < 0) { + /* initialisation error */ + ERROR("Initialisation of service %s failed (%d): %m", desc->binding->v1.prefix, rc); + afb_svc_destroy(desc->service, NULL); + desc->service = NULL; + return rc; + } + return 0; } |