mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 06:11:32 +02:00
BUG/MEDIUM: register peer sync handler in the proper order
Herv Commowick reported a failure to resync upon restart caused by a segfault on the old process. This is due to the data_ctx of the connection being initialized after the stream interface.
This commit is contained in:
parent
ab152a7eda
commit
fa6bac6ec3
@ -1162,10 +1162,10 @@ static struct session *peer_session_create(struct peer *peer, struct peer_sessio
|
|||||||
s->si[0].flags = SI_FL_NONE;
|
s->si[0].flags = SI_FL_NONE;
|
||||||
if (s->fe->options2 & PR_O2_INDEPSTR)
|
if (s->fe->options2 & PR_O2_INDEPSTR)
|
||||||
s->si[0].flags |= SI_FL_INDEP_STR;
|
s->si[0].flags |= SI_FL_INDEP_STR;
|
||||||
s->si[0].conn.data_ctx = (void *)ps;
|
|
||||||
s->si[0].applet.st0 = PEER_SESSION_CONNECT;
|
|
||||||
|
|
||||||
stream_int_register_handler(&s->si[0], &peer_applet);
|
stream_int_register_handler(&s->si[0], &peer_applet);
|
||||||
|
s->si[0].applet.st0 = PEER_SESSION_CONNECT;
|
||||||
|
s->si[0].conn.data_ctx = (void *)ps;
|
||||||
|
|
||||||
s->si[1].conn.t.sock.fd = -1; /* just to help with debugging */
|
s->si[1].conn.t.sock.fd = -1; /* just to help with debugging */
|
||||||
s->si[1].owner = t;
|
s->si[1].owner = t;
|
||||||
|
@ -336,7 +336,8 @@ static void stream_int_chk_snd(struct stream_interface *si)
|
|||||||
* it is solicited. The task's processing function must call the applet's
|
* it is solicited. The task's processing function must call the applet's
|
||||||
* function before returning. It must be deleted by the task handler using
|
* function before returning. It must be deleted by the task handler using
|
||||||
* stream_int_unregister_handler(), possibly from within the function itself.
|
* stream_int_unregister_handler(), possibly from within the function itself.
|
||||||
* It also pre-initializes applet.state to zero.
|
* It also pre-initializes applet.state to zero and the connection context
|
||||||
|
* to NULL.
|
||||||
*/
|
*/
|
||||||
struct task *stream_int_register_handler(struct stream_interface *si, struct si_applet *app)
|
struct task *stream_int_register_handler(struct stream_interface *si, struct si_applet *app)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user