summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRandall S. Becker <randall.becker@nexbridge.ca>2024-03-25 19:30:53 +0000
committerTomas Mraz <tomas@openssl.org>2024-05-06 10:50:43 +0200
commit7614c26f5f75af088aefbf61c7dea83dab61488b (patch)
treec8135e4f857f3cdba0d56e2be219ef5be5792429
parent54673b93594a71c9f8052a1df1a7c6bf07c49f4d (diff)
Correct ossl_sleep for threaded model by introducing sleep().
This fix handles situations where ossl_sleep() receives a millis value equal or greater than 1000, which breaks platforms where this is not legal. The change also avoids unnecessarily calling sleep(0). Fixes: #23961 Signed-off-by: Randall S. Becker <randall.becker@nexbridge.ca> Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/23972) (cherry picked from commit c263b1fd692bd610b1a3879a9cdad74f3ffe321d)
-rw-r--r--include/internal/e_os.h18
1 files changed, 8 insertions, 10 deletions
diff --git a/include/internal/e_os.h b/include/internal/e_os.h
index 7fdc389982..c7802d6e6c 100644
--- a/include/internal/e_os.h
+++ b/include/internal/e_os.h
@@ -296,20 +296,18 @@ static ossl_inline void ossl_sleep(unsigned long millis)
ts.tv_sec = (long int) (millis / 1000);
ts.tv_nsec = (long int) (millis % 1000) * 1000000ul;
nanosleep(&ts, NULL);
-# elif defined(__TANDEM)
-# if !defined(_REENTRANT)
+# elif defined(__TANDEM) && !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);
+ unsigned int s = (unsigned int)(millis / 1000);
+ unsigned int us = (unsigned int)((millis % 1000) * 1000);
+
+ if (s > 0)
+ sleep(s);
+ usleep(us);
# endif
}
#elif defined(_WIN32)