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)
- g_cond_broadcast(async->store->cond_idle);
- g_mutex_unlock(async->store->lock);
+ bluesky_time_hires latency = bluesky_now_hires() - async->exec_time;
+
+ if (async->op != STORE_OP_BARRIER) {
+ g_mutex_lock(async->store->lock);
+ async->store->pending--;
+ if (async->store->pending == 0)
+ g_cond_broadcast(async->store->cond_idle);
+ g_mutex_unlock(async->store->lock);
+ }
async->status = ASYNC_COMPLETE;
g_cond_broadcast(async->completion_cond);
}
g_log("bluesky/store", G_LOG_LEVEL_DEBUG,
- "[%p] complete: elapsed = %"PRIi64" ns",
- async, elapsed);
+ "[%p] complete: elapsed = %"PRIi64" ns, latency = %"PRIi64" ns",
+ async, elapsed, latency);
}
void bluesky_store_async_submit(BlueSkyStoreAsync *async)
async->start_time = bluesky_now_hires();
+ // Backends should fill this in with a better estimate of the actual time
+ // processing was started, if there could be a delay from submission time.
+ async->exec_time = bluesky_now_hires();
+
g_log("bluesky/store", G_LOG_LEVEL_DEBUG, "[%p] submit: %s %s",
async,
async->op == STORE_OP_GET ? "GET"