forked from aniani/gmnisrv
Update pollfd pointers when destroying a client
The client pollfd pointer would go stale when the server pollfd array was moved to compensate for a destroyed client, which in turn led to poll breakage. Refresh the pollfd pointers after memmove.
This commit is contained in:
parent
74077b6f95
commit
fdd27bb4c1
@ -209,6 +209,10 @@ disconnect_client(struct gmnisrv_server *server, struct gmnisrv_client *client)
|
|||||||
(server->fdsz - (server->nlisten + index + 1)) * sizeof(struct pollfd));
|
(server->fdsz - (server->nlisten + index + 1)) * sizeof(struct pollfd));
|
||||||
--server->nfds;
|
--server->nfds;
|
||||||
--server->nclients;
|
--server->nclients;
|
||||||
|
|
||||||
|
for (size_t idx = index; idx < server->nclients; idx++) {
|
||||||
|
server->clients[idx].pollfd = &server->fds[server->nlisten + index];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user