X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;ds=sidebyside;f=bluesky%2Fstore.c;h=785372b4d961452e855d1f9142323bb31a93389c;hb=1c12fd8fc5ede1bb2e991ba65e2c59831c5718c5;hp=274497db030f9035870e9628e4754dd935ea837a;hpb=c1cad41bedbd390770d5225b0e2277ae92eab9e9;p=bluesky.git diff --git a/bluesky/store.c b/bluesky/store.c index 274497d..785372b 100644 --- a/bluesky/store.c +++ b/bluesky/store.c @@ -110,8 +110,6 @@ void bluesky_store_async_unref(BlueSkyStoreAsync *async) g_free(async->key); bluesky_string_unref(async->data); g_free(async); - g_log("bluesky/store", G_LOG_LEVEL_DEBUG, - "freeing async"); } } @@ -158,6 +156,8 @@ void bluesky_store_async_mark_complete(BlueSkyStoreAsync *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) @@ -172,12 +172,26 @@ void bluesky_store_async_mark_complete(BlueSkyStoreAsync *async) 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) { @@ -187,12 +201,6 @@ void bluesky_store_async_submit(BlueSkyStoreAsync *async) 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); @@ -207,6 +215,7 @@ static void op_complete(gpointer a, gpointer b) { 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); @@ -215,6 +224,7 @@ static void op_complete(gpointer a, gpointer b) 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 @@ -387,10 +397,12 @@ static void filestore_submit(gpointer s, BlueSkyStoreAsync *async) switch (async->op) { case STORE_OP_GET: async->data = filestore_get(async->key); + async->result = 0; break; case STORE_OP_PUT: filestore_put(async->key, async->data); + async->result = 0; break; default: