binding: navigation: move get_storage_from_value call within write lock
[apps/agl-service-navigation.git] / binding / navigation-api.c
index d9ea285..ab7a5b7 100644 (file)
@@ -135,10 +135,12 @@ static void broadcast(afb_req_t request, const char *name, gboolean cache)
        json_object *jresp = afb_req_json(request);
 
        if (cache) {
-               json_object **storage = get_storage_from_value(ns, name);
+               json_object **storage;
 
                g_rw_lock_writer_lock(&ns->rw_lock);
 
+               storage = get_storage_from_value(ns, name);
+
                if (*storage)
                        json_object_put(*storage);
 
@@ -146,12 +148,22 @@ static void broadcast(afb_req_t request, const char *name, gboolean cache)
                json_object_get(jresp);
                *storage = jresp;
 
+               // increment reference for event
+               json_object_get(jresp);
+               afb_event_push(event, jresp);
+
                g_rw_lock_writer_unlock(&ns->rw_lock);
+
+               return;
        }
 
+       g_rw_lock_reader_lock(&ns->rw_lock);
+
        // increment reference for event
        json_object_get(jresp);
        afb_event_push(event, jresp);
+
+       g_rw_lock_reader_unlock(&ns->rw_lock);
 }
 
 static void broadcast_status(afb_req_t request)