g_free(async->key);
bluesky_string_unref(async->data);
g_free(async);
- g_log("bluesky/store", G_LOG_LEVEL_DEBUG,
- "freeing async");
}
}
{
g_return_if_fail(async->status != ASYNC_COMPLETE);
+ bluesky_time_hires elapsed = bluesky_now_hires() - async->start_time;
+
g_mutex_lock(async->store->lock);
async->store->pending--;
if (async->store->pending == 0)
async->notifiers = nl->next;
g_thread_pool_push(notifier_thread_pool, nl, NULL);
}
+
+ g_log("bluesky/store", G_LOG_LEVEL_DEBUG,
+ "[%p] complete: elapsed = %"PRIi64" ns",
+ async, elapsed);
}
void bluesky_store_async_submit(BlueSkyStoreAsync *async)
{
BlueSkyStore *store = async->store;
+ async->start_time = bluesky_now_hires();
+
+ g_log("bluesky/store", G_LOG_LEVEL_DEBUG, "[%p] submit: %s %s",
+ async,
+ async->op == STORE_OP_GET ? "GET"
+ : async->op == STORE_OP_PUT ? "PUT"
+ : async->op == STORE_OP_DELETE ? "DELETE"
+ : async->op == STORE_OP_BARRIER ? "BARRIER" : "???",
+ async->key);
+
/* Barriers are handled specially, and not handed down the storage
* implementation layer. */
if (async->op == STORE_OP_BARRIER) {
return;
}
- g_log("bluesky/store", G_LOG_LEVEL_DEBUG, "submit: %s %s",
- async->op == STORE_OP_GET ? "GET"
- : async->op == STORE_OP_PUT ? "PUT"
- : async->op == STORE_OP_DELETE ? "DELETE" : "???",
- async->key);
-
g_mutex_lock(async->store->lock);
async->store->pending++;
g_mutex_unlock(async->store->lock);
{
BlueSkyStoreAsync *barrier = (BlueSkyStoreAsync *)b;
+ bluesky_store_async_ref(barrier);
g_mutex_lock(barrier->lock);
barrier->store_private
= GINT_TO_POINTER(GPOINTER_TO_INT(barrier->store_private) - 1);
bluesky_store_async_mark_complete(barrier);
}
g_mutex_unlock(barrier->lock);
+ bluesky_store_async_unref(barrier);
}
/* Add the given operation to the barrier. The barrier will not complete until