From 1d2dc5e6e2328007618245629ae71a2b83762ab5 Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 27 Jun 2024 21:14:20 -0300 Subject: [PATCH] poll: 0 sized descs --- kernel-src/io/poll.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/kernel-src/io/poll.c b/kernel-src/io/poll.c index 48be6796..524b38fe 100644 --- a/kernel-src/io/poll.c +++ b/kernel-src/io/poll.c @@ -28,13 +28,13 @@ static void removefromlist(polldata_t **list, polldata_t *data) { } int poll_initdesc(polldesc_t *desc, size_t size) { - __assert(size); - memset(desc, 0, sizeof(polldesc_t)); - desc->data = alloc(sizeof(polldata_t) * size); - if (desc->data == NULL) - return ENOMEM; + if (size != 0) { + desc->data = alloc(sizeof(polldata_t) * size); + if (desc->data == NULL) + return ENOMEM; + } desc->thread = _cpu()->thread; desc->size = size; @@ -59,7 +59,7 @@ void poll_add(pollheader_t *header, polldata_t *data, int events) { } void poll_leave(polldesc_t *desc) { - for (uintmax_t i = 0; i < desc->size; ++i) { + for (uintmax_t i = 0; i < (desc->size == 0 ? 1 : desc->size); ++i) { pollheader_t *header = desc->data[i].header; if (header == NULL) continue; @@ -169,5 +169,6 @@ void poll_event(pollheader_t *header, int events) { } void poll_destroydesc(polldesc_t *desc) { - free(desc->data); + if (desc->size != 0) + free(desc->data); }