From 9d17ad73fe53ef9ecdbd7f91436f35e285d30b9f Mon Sep 17 00:00:00 2001 From: Nate Choe Date: Sun, 10 Jul 2022 04:43:49 -0500 Subject: [PATCH] Fixed connection removal --- src/runner.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/runner.c b/src/runner.c index 6b811fa..868c45c 100644 --- a/src/runner.c +++ b/src/runner.c @@ -98,14 +98,22 @@ void runServer(int connfd, Sitefile *site, volatile int *pending, int id) { } continue; remove: - freeConnection(connections + i); - --connCount; - memcpy(fds + i, fds + connCount - 1, - sizeof(struct pollfd)); - memcpy(connections + i, fds + connCount, - sizeof(struct pollfd)); - --pending[id]; - --i; + { + int remove, replace; + remove = i; + replace = connCount - 1; + freeConnection(connections + remove); + + memcpy(fds + remove, fds + replace, + sizeof(struct pollfd)); + memcpy(connections + remove, fds + replace, + sizeof(struct pollfd)); + + --pending[id]; + + --i; + --connCount; + } } if (fds[0].revents & POLLIN) { @@ -123,6 +131,7 @@ remove: if (newstream == NULL) { createLog( "Stream couldn't be created from file descriptor"); + shutdown(newfd, SHUT_RDWR); close(newfd); continue; }