]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] session: try to emit a 500 response on memory allocation errors
authorWilly Tarreau <w@1wt.eu>
Fri, 22 Jul 2011 15:36:27 +0000 (17:36 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 24 Jul 2011 14:12:25 +0000 (16:12 +0200)
When we fail to create a session because of memory shortage, let's at
least try to send a 500 message directly on the socket. Even if we don't
have any buffers left, the kernel's orphans management will take care of
delivering the message as long as there are socket buffers left.

src/session.c

index 6e3a52534cc448024f6c3554246227525955ab93..e5ac4eedd50e03908441ef61c2502fcb14beef35 100644 (file)
@@ -310,6 +310,12 @@ int session_accept(struct listener *l, int cfd, struct sockaddr_storage *addr)
  out_free_session:
        pool_free2(pool2_session, s);
  out_close:
+       if (ret < 0 && s->fe->mode == PR_MODE_HTTP) {
+               /* critical error, no more memory, try to emit a 500 response */
+               struct chunk *err_msg = error_message(s, HTTP_ERR_500);
+               send(cfd, err_msg->str, err_msg->len, MSG_DONTWAIT|MSG_NOSIGNAL);
+       }
+
        if (fdtab[cfd].state != FD_STCLOSE)
                fd_delete(cfd);
        else