From ec3e3890f0deddc103b34522b7d271fa241b782f Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Mon, 12 Nov 2012 17:02:18 +0100 Subject: [PATCH] BUG/MINOR: compression: deinit zlib only when required The zlib stream was deinitialized even when the init failed. --- include/types/session.h | 2 ++ src/proto_http.c | 5 ++++- src/session.c | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/types/session.h b/include/types/session.h index f0a5be645b..284b7e892b 100644 --- a/include/types/session.h +++ b/include/types/session.h @@ -89,6 +89,8 @@ #define SN_BE_TRACK_SC1 0x00100000 /* backend tracks stick-counter 1 */ #define SN_BE_TRACK_SC2 0x00200000 /* backend tracks stick-counter 2 */ +#define SN_COMP_READY 0x00400000 /* the compression is initialized */ + /* WARNING: if new fields are added, they must be initialized in event_accept() * and freed in session_free() ! diff --git a/src/proto_http.c b/src/proto_http.c index 4fc37ed5da..18364052c8 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -2103,6 +2103,8 @@ int select_compression_response_header(struct session *s, struct buffer *res) if (s->comp_algo->init(&s->comp_ctx, global.tune.comp_maxlevel) < 0) goto fail; + s->flags |= SN_COMP_READY; + s->comp_ctx.cur_lvl = global.tune.comp_maxlevel; /* remove Content-Length header */ @@ -2131,9 +2133,10 @@ int select_compression_response_header(struct session *s, struct buffer *res) return 1; fail: - if (s->comp_algo) { + if (s->flags & SN_COMP_READY) { s->comp_algo->end(&s->comp_ctx); s->comp_algo = NULL; + s->flags &= ~SN_COMP_READY; } return 0; } diff --git a/src/session.c b/src/session.c index 0b0a4ec5f0..f42f942937 100644 --- a/src/session.c +++ b/src/session.c @@ -565,9 +565,10 @@ static void session_free(struct session *s) sess_change_server(s, NULL); } - if (s->comp_algo) { + if (s->flags & SN_COMP_READY) { s->comp_algo->end(&s->comp_ctx); s->comp_algo = NULL; + s->flags &= ~SN_COMP_READY; } if (s->req->pipe) -- 2.39.5