1
0
mirror of http://git.haproxy.org/git/haproxy.git/ synced 2025-04-07 01:31:35 +00:00

MEDIUM: session: register a data->wake callback to process errors

The connection layer will soon call ->wake() only when errors happen, and
not ->init(). So make the session layer use this callback to detect errors
and abort connections.
This commit is contained in:
Willy Tarreau 2012-10-03 21:17:23 +02:00
parent 2396c1c4a2
commit 9683e9a05f

View File

@ -51,6 +51,7 @@ struct pool_head *pool2_session;
struct list sessions;
static int conn_session_complete(struct connection *conn);
static int conn_session_update(struct connection *conn);
static struct task *expire_mini_session(struct task *t);
int session_complete(struct session *s);
@ -58,7 +59,7 @@ int session_complete(struct session *s);
struct data_cb sess_conn_cb = {
.recv = NULL,
.send = NULL,
.wake = NULL,
.wake = conn_session_update,
.init = conn_session_complete,
};
@ -281,6 +282,18 @@ static int conn_session_complete(struct connection *conn)
return -1;
}
/* Update an embryonic session status. The connection is killed in case of
* error, and <0 will be returned. Otherwise it does nothing.
*/
static int conn_session_update(struct connection *conn)
{
if (conn->flags & CO_FL_ERROR) {
kill_mini_session(conn->owner);
return -1;
}
return 0;
}
/* Manages embryonic sessions timeout. It is only called when the timeout
* strikes and performs the required cleanup.
*/