Redbean fix listen leak (#470)

* Fix release of resources allocated to skipped sockets
* Update log messages for consistency
This commit is contained in:
Paul Kulchenko 2022-07-09 12:16:44 -07:00 committed by GitHub
parent 7756e27993
commit 9e86980191
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3456,7 +3456,7 @@ static void StoreAsset(char *path, size_t pathlen, char *data, size_t datalen,
} }
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
if (-1 == fcntl(zfd, F_SETLKW, &(struct flock){F_WRLCK})) { if (-1 == fcntl(zfd, F_SETLKW, &(struct flock){F_WRLCK})) {
WARNF("can't place write lock on file descriptor %d: %s", zfd, WARNF("(srvr) can't place write lock on file descriptor %d: %s", zfd,
strerror(errno)); strerror(errno));
return; return;
} }
@ -6931,6 +6931,7 @@ static void Listen(void) {
} }
if (hasonserverlisten && if (hasonserverlisten &&
LuaOnServerListen(servers.p[n].fd, ips.p[i], ports.p[j])) { LuaOnServerListen(servers.p[n].fd, ips.p[i], ports.p[j])) {
close(servers.p[n].fd);
n--; // skip this server instance n--; // skip this server instance
continue; continue;
} }
@ -6958,6 +6959,8 @@ static void Listen(void) {
} }
} }
} }
// shrink allocated memory in case some of the sockets were skipped
if (n < ips.n * ports.n) servers.p = realloc(servers.p, n*sizeof(*servers.p));
servers.n = n; servers.n = n;
polls = malloc((1 + n) * sizeof(*polls)); polls = malloc((1 + n) * sizeof(*polls));
polls[0].fd = -1; polls[0].fd = -1;