diff options
author | Randall S. Becker <randall.becker@nexbridge.ca> | 2024-03-25 19:30:53 +0000 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2024-05-06 10:50:43 +0200 |
commit | 7614c26f5f75af088aefbf61c7dea83dab61488b (patch) | |
tree | c8135e4f857f3cdba0d56e2be219ef5be5792429 | |
parent | 54673b93594a71c9f8052a1df1a7c6bf07c49f4d (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.h | 18 |
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) |