mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 07:37:02 +02:00
[MAJOR] fixed missing checks for NULL srv pointers (possible in dispatch mode)
This commit is contained in:
parent
cd655351b8
commit
926a3575e6
13
haproxy.c
13
haproxy.c
@ -2242,6 +2242,7 @@ int connect_server(struct session *s) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
fd_insert(fd);
|
fd_insert(fd);
|
||||||
|
if (s->srv)
|
||||||
s->srv->cur_sess++;
|
s->srv->cur_sess++;
|
||||||
|
|
||||||
if (s->proxy->contimeout)
|
if (s->proxy->contimeout)
|
||||||
@ -4396,6 +4397,7 @@ int process_srv(struct session *t) {
|
|||||||
/* timeout, connect error or first write error */
|
/* timeout, connect error or first write error */
|
||||||
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
//close(t->srv_fd);
|
//close(t->srv_fd);
|
||||||
t->conn_retries--;
|
t->conn_retries--;
|
||||||
@ -4506,6 +4508,7 @@ int process_srv(struct session *t) {
|
|||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
t->logs.status = 502;
|
t->logs.status = 502;
|
||||||
@ -4528,6 +4531,7 @@ int process_srv(struct session *t) {
|
|||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
t->logs.status = 502;
|
t->logs.status = 502;
|
||||||
@ -4961,6 +4965,7 @@ int process_srv(struct session *t) {
|
|||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
t->logs.status = 502;
|
t->logs.status = 502;
|
||||||
@ -4990,6 +4995,7 @@ int process_srv(struct session *t) {
|
|||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
t->logs.status = 504;
|
t->logs.status = 504;
|
||||||
@ -5086,6 +5092,7 @@ int process_srv(struct session *t) {
|
|||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
if (!(t->flags & SN_ERR_MASK))
|
if (!(t->flags & SN_ERR_MASK))
|
||||||
@ -5193,6 +5200,7 @@ int process_srv(struct session *t) {
|
|||||||
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
//close(t->srv_fd);
|
//close(t->srv_fd);
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
@ -5207,6 +5215,7 @@ int process_srv(struct session *t) {
|
|||||||
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
//close(t->srv_fd);
|
//close(t->srv_fd);
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
@ -5217,6 +5226,7 @@ int process_srv(struct session *t) {
|
|||||||
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
//FD_CLR(t->srv_fd, StaticWriteEvent);
|
||||||
tv_eternity(&t->swexpire);
|
tv_eternity(&t->swexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
//close(t->srv_fd);
|
//close(t->srv_fd);
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
@ -5253,6 +5263,7 @@ int process_srv(struct session *t) {
|
|||||||
//FD_CLR(t->srv_fd, StaticReadEvent);
|
//FD_CLR(t->srv_fd, StaticReadEvent);
|
||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
//close(t->srv_fd);
|
//close(t->srv_fd);
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
@ -5267,6 +5278,7 @@ int process_srv(struct session *t) {
|
|||||||
//FD_CLR(t->srv_fd, StaticReadEvent);
|
//FD_CLR(t->srv_fd, StaticReadEvent);
|
||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
//close(t->srv_fd);
|
//close(t->srv_fd);
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
@ -5277,6 +5289,7 @@ int process_srv(struct session *t) {
|
|||||||
//FD_CLR(t->srv_fd, StaticReadEvent);
|
//FD_CLR(t->srv_fd, StaticReadEvent);
|
||||||
tv_eternity(&t->srexpire);
|
tv_eternity(&t->srexpire);
|
||||||
fd_delete(t->srv_fd);
|
fd_delete(t->srv_fd);
|
||||||
|
if (t->srv)
|
||||||
t->srv->cur_sess--;
|
t->srv->cur_sess--;
|
||||||
//close(t->srv_fd);
|
//close(t->srv_fd);
|
||||||
t->srv_state = SV_STCLOSE;
|
t->srv_state = SV_STCLOSE;
|
||||||
|
Loading…
Reference in New Issue
Block a user