jobs: Fix a lock of call sync
[src/app-framework-binder.git] / bindings / samples / HelloWorld.c
index 92d7c4d..844aa1b 100644 (file)
@@ -282,13 +282,10 @@ static void eventpush (afb_req_t request)
        json_object_put(object);
 }
 
-static void callcb (void *prequest, int status, json_object *object, afb_api_t api)
+static void callcb (void *prequest, json_object *object, const char *error, const char *info, afb_api_t api)
 {
        afb_req_t request = prequest;
-       if (status < 0)
-               afb_req_fail(request, "failed", json_object_to_json_string(object));
-       else
-               afb_req_success(request, json_object_get(object), NULL);
+       afb_req_reply(request, json_object_get(object), error, info);
        afb_req_unref(request);
 }
 
@@ -299,31 +296,22 @@ static void call (afb_req_t request)
        const char *args = afb_req_value(request, "args");
        json_object *object = api && verb && args ? json_tokener_parse(args) : NULL;
 
-       if (object == NULL)
-               afb_req_fail(request, "failed", "bad arguments");
-       else
-               afb_service_call(api, verb, object, callcb, afb_req_addref(request));
+       afb_service_call(api, verb, object, callcb, afb_req_addref(request));
 }
 
 static void callsync (afb_req_t request)
 {
-       int rc;
        const char *api = afb_req_value(request, "api");
        const char *verb = afb_req_value(request, "verb");
        const char *args = afb_req_value(request, "args");
-       json_object *result, *object = api && verb && args ? json_tokener_parse(args) : NULL;
+       json_object *object = api && verb && args ? json_tokener_parse(args) : NULL;
+       json_object *result;
+       char *error, *info;
 
-       if (object == NULL)
-               afb_req_fail(request, "failed", "bad arguments");
-       else {
-               rc = afb_service_call_sync(api, verb, object, &result);
-               if (rc >= 0)
-                       afb_req_success(request, result, NULL);
-               else {
-                       afb_req_fail(request, "failed", json_object_to_json_string(result));
-                       json_object_put(result);
-               }
-       }
+       afb_service_call_sync(api, verb, object, &result, &error, &info);
+       afb_req_reply(request, result, error, info);
+       free(error);
+       free(info);
 }
 
 static void verbose (afb_req_t request)