X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-api-so-v2.c;h=038f1ce20f134c99e7a4cfedb56adab6347e2827;hb=11e2d4395056c7bd2a618b4fa7ffdd70af05d14e;hp=bc5ecdf7d2fdf1a6f73c9a2528645893efa41c9a;hpb=bfffa28ba0483b49770326c4f567950ea80d0fb6;p=src%2Fapp-framework-binder.git diff --git a/src/afb-api-so-v2.c b/src/afb-api-so-v2.c index bc5ecdf7..038f1ce2 100644 --- a/src/afb-api-so-v2.c +++ b/src/afb-api-so-v2.c @@ -103,6 +103,7 @@ static void call_sync_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 (*start)(); void (*onevent)(const char *event, struct json_object *object); @@ -133,13 +134,24 @@ static int service_start_cb(void *closure, int share_session, int onneed, struct } /* get the event handler if any */ - desc->service = afb_svc_create_v2(desc->binding->api, apiset, share_session, start, onevent, desc->data); + desc->service = afb_svc_create(desc->binding->api, apiset, share_session, onevent, &desc->data->service); if (desc->service == NULL) { /* starting error */ ERROR("Starting service %s failed", desc->binding->api); return -1; } + /* Starts the service */ + rc = afb_svc_start_v2(desc->service, start); + if (rc < 0) { + /* initialisation error */ + ERROR("Initialisation of service %s failed (%d): %m", desc->binding->api, rc); + afb_svc_destroy(desc->service, &desc->data->service); + desc->service = NULL; + return rc; + } + + return 0; }