]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
context: kr_context_txn_commit() call
authorMarek Vavruša <marek.vavrusa@nic.cz>
Mon, 8 Dec 2014 13:03:15 +0000 (14:03 +0100)
committerMarek Vavruša <marek.vavrusa@nic.cz>
Mon, 8 Dec 2014 13:03:15 +0000 (14:03 +0100)
lib/context.c
lib/context.h

index 3486a2a240288b030bd7eee2b1c64daf1433574e..339fa3c5ef42a4e9d3e9f2f8516b03a950e30ad9 100644 (file)
@@ -26,11 +26,9 @@ int kr_context_init(struct kr_context *ctx, mm_ctx_t *mm)
 int kr_context_reset(struct kr_context *ctx)
 {
        /* Finalize transactions. */
-       if (ctx->txn.write) {
-               kr_cache_txn_commit(ctx->txn.write);
-       }
-       if (ctx->txn.read) {
-               kr_cache_txn_abort(ctx->txn.read);
+       int ret = kr_context_txn_commit(ctx);
+       if (ret != KNOT_EOK) {
+               return ret;
        }
 
        ctx->state = 0;
@@ -41,7 +39,7 @@ int kr_context_reset(struct kr_context *ctx)
        ctx->txn.write = NULL;
        kr_rplan_clear(&ctx->rplan);
 
-       return 0;
+       return KNOT_EOK;
 }
 
 int kr_context_deinit(struct kr_context *ctx)
@@ -49,14 +47,14 @@ int kr_context_deinit(struct kr_context *ctx)
        kr_delegmap_deinit(&ctx->dp_map);
        kr_cache_close(ctx->cache);
 
-       return -1;
+       return KNOT_EOK;
 }
 
 struct kr_txn *kr_context_txn_acquire(struct kr_context *ctx, unsigned flags)
 {
        struct kr_txn **txn = &ctx->txn.write;
        if (flags & KR_CACHE_RDONLY) {
-               txn = &ctx->txn.read;   
+               txn = &ctx->txn.read;
        }
 
        if (*txn != NULL) {
@@ -68,6 +66,25 @@ struct kr_txn *kr_context_txn_acquire(struct kr_context *ctx, unsigned flags)
 
 void kr_context_txn_release(struct kr_txn *txn)
 {
+       /*! \note Transactions are reused and commited on checkpoints only. */
+}
+
+int kr_context_txn_commit(struct kr_context *ctx)
+{
+       if (ctx == NULL) {
+               return KNOT_EINVAL;
+       }
+
+       int ret = KNOT_EOK;
+       if (ctx->txn.write) {
+               ret = kr_cache_txn_commit(ctx->txn.write);
+       }
+       if (ctx->txn.read) {
+               kr_cache_txn_abort(ctx->txn.read);
+       }
+
+       ctx->txn.read = ctx->txn.write = NULL;
+       return ret;
 }
 
 int kr_result_init(struct kr_context *ctx, struct kr_result *result)
index 17a8c20eeb3f3b4f2a7682e7de355051069b8d23..66afb01d6a75089feefcf5e17a0873286de6c5a2 100644 (file)
@@ -56,6 +56,7 @@ int kr_context_reset(struct kr_context *ctx);
 int kr_context_deinit(struct kr_context *ctx);
 struct kr_txn *kr_context_txn_acquire(struct kr_context *ctx, unsigned flags);
 void kr_context_txn_release(struct kr_txn *txn);
+int kr_context_txn_commit(struct kr_context *ctx);
 
 int kr_result_init(struct kr_context *ctx, struct kr_result *result);
 int kr_result_deinit(struct kr_result *result);