diff options
author | Dr. David von Oheimb <David.von.Oheimb@siemens.com> | 2021-05-17 13:24:20 +0200 |
---|---|---|
committer | Dr. David von Oheimb <dev@ddvo.net> | 2021-05-18 14:49:33 +0200 |
commit | 9be5f9a8698b0d902ef1281716eda73a4d8478ed (patch) | |
tree | 9a6fae021f6d21482b78768b97105da1495e613a /e_os.h | |
parent | 78c44e4f819721eb80ad95fddc360a34f9e93118 (diff) |
Move ossl_sleep() to e_os.h and use it in apps
Fixes #15304
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15308)
Diffstat (limited to 'e_os.h')
-rw-r--r-- | e_os.h | 48 |
1 files changed, 48 insertions, 0 deletions
@@ -303,6 +303,54 @@ struct servent *getservbyname(const char *name, const char *proto); # endif /* end vxworks */ +/* system-specific variants defining ossl_sleep() */ +#ifdef OPENSSL_SYS_UNIX +# include <unistd.h> +static ossl_inline void ossl_sleep(unsigned long millis) +{ +# ifdef OPENSSL_SYS_VXWORKS + struct timespec ts; + ts.tv_sec = (long int) (millis / 1000); + ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; + nanosleep(&ts, NULL); +# elif defined(__TANDEM) +# if !defined(_REENTRANT) +# include <cextdecs.h(PROCESS_DELAY_)> + /* HPNS does not support usleep for non threaded apps */ + PROCESS_DELAY_(millis * 1000); +# elif defined(_SPT_MODEL_) +# include <spthread.h> +# include <spt_extensions.h> + usleep(millis * 1000); +# else + usleep(millis * 1000); +# endif +# else + usleep(millis * 1000); +# endif +} +#elif defined(_WIN32) +# include <windows.h> +static ossl_inline void ossl_sleep(unsigned long millis) +{ + Sleep(millis); +} +#else +/* Fallback to a busy wait */ +static ossl_inline void ossl_sleep(unsigned long millis) +{ + struct timeval start, now; + unsigned long elapsedms; + + gettimeofday(&start, NULL); + do { + gettimeofday(&now, NULL); + elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) + + now.tv_usec - start.tv_usec) / 1000; + } while (elapsedms < millis); +} +#endif /* defined OPENSSL_SYS_UNIX */ + /* ----------------------------- HP NonStop -------------------------------- */ /* Required to support platform variant without getpid() and pid_t. */ # if defined(__TANDEM) && defined(_GUARDIAN_TARGET) |