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.
diff --git a/src/session.c b/src/session.c
index a32ec6b..b5dfd2b 100644
--- a/src/session.c
+++ b/src/session.c
@@ -51,6 +51,7 @@
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 @@
struct data_cb sess_conn_cb = {
.recv = NULL,
.send = NULL,
- .wake = NULL,
+ .wake = conn_session_update,
.init = conn_session_complete,
};
@@ -281,6 +282,18 @@
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.
*/