From 6ed8836b151b6e0cbcd6e48fc13f5ec86e0459f1 Mon Sep 17 00:00:00 2001 From: VilhoRaatikka Date: Mon, 3 Nov 2014 22:07:54 +0200 Subject: [PATCH] dcb.c:dcb_close prevent redundant execution of dcb_close for one DCB --- server/core/dcb.c | 35 ++++++++++++++++++++--------------- server/core/poll.c | 4 ++-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index b6584f866..26ca9c6f0 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1161,23 +1161,28 @@ dcb_close(DCB *dcb) dcb, STRDCBSTATE(dcb->state)))); } + + if (rc == 0) + { + /** + * close protocol and router session + */ + if (dcb->func.close != NULL) + { + dcb->func.close(dcb); + } + dcb_call_callback(dcb, DCB_REASON_CLOSE); + + + if (dcb->state == DCB_STATE_NOPOLLING) + { + dcb_add_to_zombieslist(dcb); + } + } + } ss_dassert(dcb->state == DCB_STATE_NOPOLLING || - dcb->state == DCB_STATE_ZOMBIE); - /** - * close protocol and router session - */ - if (dcb->func.close != NULL) - { - dcb->func.close(dcb); - } - dcb_call_callback(dcb, DCB_REASON_CLOSE); - - - if (dcb->state == DCB_STATE_NOPOLLING) - { - dcb_add_to_zombieslist(dcb); - } + dcb->state == DCB_STATE_ZOMBIE); } /** diff --git a/server/core/poll.c b/server/core/poll.c index 51bba4027..5e894cc90 100644 --- a/server/core/poll.c +++ b/server/core/poll.c @@ -292,7 +292,8 @@ poll_remove_dcb(DCB *dcb) CHK_DCB(dcb); /*< It is possible that dcb has already been removed from the set */ - if (dcb->state != DCB_STATE_POLLING) { + if (dcb->state != DCB_STATE_POLLING) + { if (dcb->state == DCB_STATE_NOPOLLING || dcb->state == DCB_STATE_ZOMBIE) { @@ -300,7 +301,6 @@ poll_remove_dcb(DCB *dcb) } goto return_rc; } - /*< * Set state to NOPOLLING and remove dcb from poll set. */