BUG: stream_sock: si->release was not called upon shutw()
The ->release function of the stream interface is never called upon a shutw() because it's placed after a return statement. It is possible that it has impacted inter-process stick-table replication by preventing a full resync after certain sequences of connection breakage. Since this bug has been present since the introduction of the ->release() callback, it cannot have caused regressions, just possibly non-working situations. This was detected at Exceliance by Emeric Brun during a code review. It is 1.5-specific.
This commit is contained in:
parent
62e7c7146e
commit
ad4cd58986
|
@ -885,16 +885,15 @@ void stream_sock_shutw(struct stream_interface *si)
|
||||||
case SI_ST_QUE:
|
case SI_ST_QUE:
|
||||||
case SI_ST_TAR:
|
case SI_ST_TAR:
|
||||||
si->state = SI_ST_DIS;
|
si->state = SI_ST_DIS;
|
||||||
|
|
||||||
|
if (si->release)
|
||||||
|
si->release(si);
|
||||||
default:
|
default:
|
||||||
si->flags &= ~SI_FL_WAIT_ROOM;
|
si->flags &= ~SI_FL_WAIT_ROOM;
|
||||||
si->ib->flags |= BF_SHUTR;
|
si->ib->flags |= BF_SHUTR;
|
||||||
si->ib->rex = TICK_ETERNITY;
|
si->ib->rex = TICK_ETERNITY;
|
||||||
si->exp = TICK_ETERNITY;
|
si->exp = TICK_ETERNITY;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (si->release)
|
|
||||||
si->release(si);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue