From a867c29633a89d59b09a8f6788a6f3aaa5a9f65b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Mon, 8 Jan 2018 14:50:56 +0100 Subject: [PATCH] libc: return on nanosleep with zero timeout In case the calculated timeout value is zero return directly and do not call Libc::suspend as it will suspend us indefinitely. Fixes #2636. --- repos/libports/src/lib/libc/nanosleep.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repos/libports/src/lib/libc/nanosleep.cc b/repos/libports/src/lib/libc/nanosleep.cc index 9c0738a73..7068abe8c 100644 --- a/repos/libports/src/lib/libc/nanosleep.cc +++ b/repos/libports/src/lib/libc/nanosleep.cc @@ -21,6 +21,8 @@ int _nanosleep(const struct timespec *req, struct timespec *rem) { unsigned long sleep_ms = req->tv_sec*1000 + req->tv_nsec/1000000; + if (!sleep_ms) return 0; + struct Check : Libc::Suspend_functor { bool suspend() override { return true; } } check; do { sleep_ms = Libc::suspend(check, sleep_ms); } while (sleep_ms);