+ OSSL_TIME now = ossl_time_now();
+ OSSL_TIME finish = ossl_time_add(now, ossl_ms2time(millis));
+ uint64_t left = millis;
+
+#if defined(USE_SLEEP_SECS)
+ do {
+ ossl_sleep_secs(left / 1000);
+ now = ossl_time_now();
+ left = ossl_time2ms(ossl_time_subtract(finish, now));
+ } while (ossl_time_compare(now, finish) < 0 && left > 1000);
+
+ if (ossl_time_compare(now, finish) >= 0)
+ return;
+#endif
+
+ do {
+ ossl_sleep_millis(left);
+ now = ossl_time_now();
+ left = ossl_time2ms(ossl_time_subtract(finish, now));
+ } while (ossl_time_compare(now, finish) < 0);