From ecb73b12c1d8bead2bcf5bf8d06647708a20070e Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Fri, 24 Nov 2017 14:33:55 +0100 Subject: [PATCH] MINOR: cache: move the refcount decrease in the applet release Move the refcount decrease of the cache in the release callback of the applet. We don't need to decrease it in the applet code. --- src/cache.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/cache.c b/src/cache.c index e277bec85..7ae3267e5 100644 --- a/src/cache.c +++ b/src/cache.c @@ -524,6 +524,17 @@ enum act_return http_action_store_cache(struct act_rule *rule, struct proxy *px, #define HTTP_CACHE_FWD 1 #define HTTP_CACHE_END 2 +static void http_cache_applet_release(struct appctx *appctx) +{ + struct cache *cache = (struct cache *)appctx->rule->arg.act.p[0]; + struct cache_entry *cache_ptr = appctx->ctx.cache.entry; + struct shared_block *first = block_ptr(cache_ptr); + + shctx_lock(shctx_ptr(cache)); + shctx_row_dec_hot(shctx_ptr(cache), first); + shctx_unlock(shctx_ptr(cache)); +} + static void http_cache_io_handler(struct appctx *appctx) { struct stream_interface *si = appctx->owner; @@ -551,18 +562,12 @@ static void http_cache_io_handler(struct appctx *appctx) if ((shctx_row_data_get(shctx, first, (unsigned char *)bi_end(res->buf), sizeof(struct cache_entry), len)) != 0) { fprintf(stderr, "cache error too big: %d\n", first->len - (int)sizeof(struct cache_entry)); - shctx_lock(shctx_ptr(cache)); - shctx_row_dec_hot(shctx_ptr(cache), first); - shctx_unlock(shctx_ptr(cache)); si_applet_cant_put(si); goto out; } res->buf->i += len; res->total += len; appctx->st0 = HTTP_CACHE_FWD; - shctx_lock(shctx_ptr(cache)); - shctx_row_dec_hot(shctx_ptr(cache), first); - shctx_unlock(shctx_ptr(cache)); } if (appctx->st0 == HTTP_CACHE_FWD) { @@ -1015,7 +1020,7 @@ struct applet http_cache_applet = { .obj_type = OBJ_TYPE_APPLET, .name = "", /* used for logging */ .fct = http_cache_io_handler, - .release = NULL, + .release = http_cache_applet_release, }; __attribute__((constructor))