A crash could occured if a session_add_conn() would temporarily failed
when called via h2_detach(). In this case, connection owner is reset to
NULL. However, if this wasn't the last connection stream, the connection
won't be destroyed. When h2_detach() is recalled for another stream and
this time session_add_conn() succeeds, a crash will occur due to
session_check_idle_conn() invocation with a NULL connection owner.
To fix this, ensure connection owner is always set after
session_add_conn() success.
This bug is considered as minor as the only failure reason for
session_add_conn() is a pool allocation issue.
This should be backported up to all stable releases.
MT_LIST_APPEND(&srv->sess_conns, &pconns->srv_el);
}
LIST_APPEND(&pconns->conn_list, &conn->sess_el);
+
+ /* Ensure owner is set for connection. It could have been resetted
+ * prior on after a session_add_conn() failure.
+ */
+ conn->owner = sess;
+
return 1;
}