MINOR: stream_interface: add reporting of ressouce allocation errors
SSL and keep-alive will need to be able to fail on allocation errors,
and the stream interface did not allow to report such a cause. The flag
will then be "RC" as already documented.
diff --git a/include/types/stream_interface.h b/include/types/stream_interface.h
index afe1ec8..f0b63c4 100644
--- a/include/types/stream_interface.h
+++ b/include/types/stream_interface.h
@@ -57,10 +57,11 @@
SI_ET_CONN_TO = 0x0008, /* connection timeout */
SI_ET_CONN_ERR = 0x0010, /* connection error (eg: no server available) */
SI_ET_CONN_ABRT = 0x0020, /* connection aborted by external cause (eg: abort) */
- SI_ET_CONN_OTHER = 0x0040, /* connection aborted for other reason (eg: 500) */
- SI_ET_DATA_TO = 0x0080, /* timeout during data phase */
- SI_ET_DATA_ERR = 0x0100, /* error during data phase */
- SI_ET_DATA_ABRT = 0x0200, /* data phase aborted by external cause */
+ SI_ET_CONN_RES = 0x0040, /* connection aborted due to lack of resources */
+ SI_ET_CONN_OTHER = 0x0080, /* connection aborted for other reason (eg: 500) */
+ SI_ET_DATA_TO = 0x0100, /* timeout during data phase */
+ SI_ET_DATA_ERR = 0x0200, /* error during data phase */
+ SI_ET_DATA_ABRT = 0x0400, /* data phase aborted by external cause */
};
/* flags set after I/O (16 bit) */
diff --git a/src/proto_http.c b/src/proto_http.c
index a7e42fc..900f747 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -936,6 +936,9 @@
else if (err_type & SI_ET_CONN_ERR)
http_server_error(s, si, SN_ERR_SRVCL, SN_FINST_C,
503, http_error_message(s, HTTP_ERR_503));
+ else if (err_type & SI_ET_CONN_RES)
+ http_server_error(s, si, SN_ERR_RESOURCE, SN_FINST_C,
+ 503, http_error_message(s, HTTP_ERR_503));
else /* SI_ET_CONN_OTHER and others */
http_server_error(s, si, SN_ERR_INTERNAL, SN_FINST_C,
500, http_error_message(s, HTTP_ERR_500));
diff --git a/src/session.c b/src/session.c
index 1183d91..75ac04c 100644
--- a/src/session.c
+++ b/src/session.c
@@ -2576,6 +2576,10 @@
err = SN_ERR_SRVCL;
fin = SN_FINST_C;
}
+ else if (err_type & SI_ET_CONN_RES) {
+ err = SN_ERR_RESOURCE;
+ fin = SN_FINST_C;
+ }
else /* SI_ET_CONN_OTHER and others */ {
err = SN_ERR_INTERNAL;
fin = SN_FINST_C;