Browse Source

Merge pull request #42740 from lolleko/fix-nanosleep-usage

Fix nanosleep usage
Rémi Verschelde 4 years ago
parent
commit
f414a323b1
1 changed files with 5 additions and 2 deletions
  1. 5 2
      drivers/unix/os_unix.cpp

+ 5 - 2
drivers/unix/os_unix.cpp

@@ -234,8 +234,11 @@ OS::TimeZoneInfo OS_Unix::get_time_zone_info() const {
 }
 
 void OS_Unix::delay_usec(uint32_t p_usec) const {
-	struct timespec rem = { static_cast<time_t>(p_usec / 1000000), (static_cast<long>(p_usec) % 1000000) * 1000 };
-	while (nanosleep(&rem, &rem) == EINTR) {
+	struct timespec requested = { static_cast<time_t>(p_usec / 1000000), (static_cast<long>(p_usec) % 1000000) * 1000 };
+	struct timespec remaining;
+	while (nanosleep(&requested, &remaining) == -1 && errno == EINTR) {
+		requested.tv_sec = remaining.tv_sec;
+		requested.tv_nsec = remaining.tv_nsec;
 	}
 }