From: Willy Tarreau Date: Tue, 7 Sep 2010 14:16:50 +0000 (+0200) Subject: [BUG] stream_interface: only call si->release when both dirs are closed X-Git-Tag: v1.5-dev8~470 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8ccffe0f6c1517cf112032d1cf5fb62f43dbb61;p=thirdparty%2Fhaproxy.git [BUG] stream_interface: only call si->release when both dirs are closed si->release() was called each time we closed one direction of a stream interface, while it should only have been called when both sides are closed. This bug is specific to 1.5 and only affects embedded tasks. --- diff --git a/src/stream_interface.c b/src/stream_interface.c index f7f0881690..2ffca17ba1 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -192,10 +192,10 @@ void stream_int_shutr(struct stream_interface *si) if (si->ob->flags & BF_SHUTW) { si->state = SI_ST_DIS; si->exp = TICK_ETERNITY; - } - if (si->release) - si->release(si); + if (si->release) + si->release(si); + } /* note that if the task exist, it must unregister itself once it runs */ if (!(si->flags & SI_FL_DONT_WAKE) && si->owner) @@ -226,6 +226,9 @@ void stream_int_shutw(struct stream_interface *si) case SI_ST_CER: si->state = SI_ST_DIS; /* fall through */ + + if (si->release) + si->release(si); default: si->flags &= ~SI_FL_WAIT_ROOM; si->ib->flags |= BF_SHUTR; @@ -233,9 +236,6 @@ void stream_int_shutw(struct stream_interface *si) si->exp = TICK_ETERNITY; } - if (si->release) - si->release(si); - /* note that if the task exist, it must unregister itself once it runs */ if (!(si->flags & SI_FL_DONT_WAKE) && si->owner) task_wakeup(si->owner, TASK_WOKEN_IO);