From 4872304086721d26e38796da0d65ee5d24a1ce3e Mon Sep 17 00:00:00 2001 From: claudio Date: Fri, 19 Oct 2018 08:13:34 +0000 Subject: When calculating the fd limit before accepting a new connection also account for the inflight fds caused by the new connection. Without this slowcgi could fail when close to the limit because FD_RESERVE is smaller then FD_NEEDED. OK florian@, tested by Kristaps Dzonsons --- slowcgi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'slowcgi.c') diff --git a/slowcgi.c b/slowcgi.c index 696af72..8def399 100644 --- a/slowcgi.c +++ b/slowcgi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: slowcgi.c,v 1.54 2018/08/19 12:31:41 florian Exp $ */ +/* $OpenBSD: slowcgi.c,v 1.55 2018/10/19 08:13:34 claudio Exp $ */ /* * Copyright (c) 2013 David Gwynne * Copyright (c) 2013 Florian Obser @@ -437,7 +437,7 @@ accept_reserve(int sockfd, struct sockaddr *addr, socklen_t *addrlen, { int ret; if (getdtablecount() + reserve + - (*counter * FD_NEEDED) >= getdtablesize()) { + ((*counter + 1) * FD_NEEDED) >= getdtablesize()) { ldebug("inflight fds exceeded"); errno = EMFILE; return -1; -- cgit v1.2.3-2-gb3c3