djgpp: Use usleep() for ossl_sleep()
authorJ.W. Jagersma <jwjagersma@gmail.com>
Sun, 25 Sep 2022 17:04:31 +0000 (19:04 +0200)
committerTomas Mraz <tomas@openssl.org>
Thu, 29 Sep 2022 10:04:00 +0000 (12:04 +0200)
This part failed to compile due to a circular dependency between
internal/e_os.h and internal/time.h, when ossl_sleep() falls back to a
busy wait.  However, djgpp has a usleep function, so it can use the
regular Unix version of ossl_sleep().

It's not great though.  The resolution is only ~55ms, and it may break
when a user program hooks the timer interrupt without periodically
updating BIOS time.  A high-resolution alternative is uclock(), but
that is generally less desirable since it reprograms the system timer.

The circular dependency is still there and may still cause trouble for
other platforms.

CLA: trivial

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19274)

(cherry picked from commit 651255941c49a5089dfc011f2abd636433da8b82)

e_os.h

diff --git a/e_os.h b/e_os.h
index 9e2f14072f6cf7acdb9ddd7079c443a75d94a49a..db05b7f8150f892a9403f8b70d87d1f2722b801e 100644 (file)
--- a/e_os.h
+++ b/e_os.h
@@ -287,7 +287,7 @@ struct servent *getservbyname(const char *name, const char *proto);
 /* end vxworks */
 
 /* system-specific variants defining ossl_sleep() */
-#ifdef OPENSSL_SYS_UNIX
+#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__)
 # include <unistd.h>
 static ossl_inline void ossl_sleep(unsigned long millis)
 {