From 81bc3b062b70da3f4ab11a8ff838d41147118b18 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 31 Oct 2016 17:37:39 +0100 Subject: [PATCH] MINOR: peers: make peer_session_forceshutdown() use the appctx and not the stream It was inherited from initial code but we must only manipulate the appctx and never the stream, otherwise we always risk shooting ourselves in the foot. --- src/peers.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/peers.c b/src/peers.c index 9e14685f5..6b8f7f9ef 100644 --- a/src/peers.c +++ b/src/peers.c @@ -172,7 +172,7 @@ enum { #define PEER_DWNGRD_MINOR_VER 0 struct peers *peers = NULL; -static void peer_session_forceshutdown(struct stream * stream); +static void peer_session_forceshutdown(struct appctx *appctx); int intencode(uint64_t i, char **str) { int idx = 0; @@ -669,7 +669,7 @@ switchstate: appctx->st1 = PEER_SESS_SC_TRYAGAIN; goto switchstate; } - peer_session_forceshutdown(curpeer->stream); + peer_session_forceshutdown(curpeer->appctx); } if (maj_ver != (unsigned int)-1 && min_ver != (unsigned int)-1) { if (min_ver == PEER_DWNGRD_MINOR_VER) { @@ -1708,25 +1708,16 @@ static struct applet peer_applet = { /* * Use this function to force a close of a peer session */ -static void peer_session_forceshutdown(struct stream * stream) +static void peer_session_forceshutdown(struct appctx *appctx) { - struct appctx *appctx = NULL; struct peer *ps; - int i; - - for (i = 0; i <= 1; i++) { - appctx = objt_appctx(stream->si[i].end); - if (!appctx) - continue; - if (appctx->applet != &peer_applet) - continue; - break; - } - if (!appctx) return; + if (appctx->applet != &peer_applet) + return; + ps = appctx->ctx.peers.ptr; /* we're killing a connection, we must apply a random delay before * retrying otherwise the other end will do the same and we can loop @@ -1980,7 +1971,7 @@ static struct task *process_peer_sync(struct task * task) /* disconnect all connected peers */ for (ps = peers->remote; ps; ps = ps->next) { if (ps->stream) { - peer_session_forceshutdown(ps->stream); + peer_session_forceshutdown(ps->appctx); ps->stream = NULL; ps->appctx = NULL; }