mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 22:01:31 +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;
|
||||
if (s->fe->options2 & PR_O2_INDEPSTR)
|
||||
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);
|
||||
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].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
|
||||
* function before returning. It must be deleted by the task handler using
|
||||
* 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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user