diff --git a/kernel-src/io/tty.c b/kernel-src/io/tty.c index 469cadca..eb08b301 100644 --- a/kernel-src/io/tty.c +++ b/kernel-src/io/tty.c @@ -257,14 +257,17 @@ static int read(int minor, iovec_iterator_t *iovec_iterator, size_t size, uintma error = poll_dowait(&desc, effectivetimeout); - poll_leave(&desc); - poll_destroydesc(&desc); if (error == 0 && (desc.event == NULL || (desc.event && desc.event->revents == 0))) { // timed out! + poll_leave(&desc); + poll_destroydesc(&desc); break; } + poll_leave(&desc); + poll_destroydesc(&desc); + if (error) goto leave; }