From: Marek VavruĊĦa Date: Mon, 8 Dec 2014 13:03:15 +0000 (+0100) Subject: context: kr_context_txn_commit() call X-Git-Tag: v1.0.0-beta1~406 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1996a041967e55d0af7f94b9da2b397ea5fbbf7d;p=thirdparty%2Fknot-resolver.git context: kr_context_txn_commit() call --- diff --git a/lib/context.c b/lib/context.c index 3486a2a24..339fa3c5e 100644 --- a/lib/context.c +++ b/lib/context.c @@ -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) diff --git a/lib/context.h b/lib/context.h index 17a8c20ee..66afb01d6 100644 --- a/lib/context.h +++ b/lib/context.h @@ -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);