diff options
author | Rickard Green <[email protected]> | 2016-06-20 15:51:25 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2016-06-22 17:13:45 +0200 |
commit | b71dde8bd94985f5953a1647802ac312a798fe69 (patch) | |
tree | d9aa5f8970daaff01d2e925e6fea7727ad233a77 /erts/include/internal | |
parent | 3b7a6ffddc819bf305353a593904cea9e932e7dc (diff) | |
download | otp-b71dde8bd94985f5953a1647802ac312a798fe69.tar.gz otp-b71dde8bd94985f5953a1647802ac312a798fe69.tar.bz2 otp-b71dde8bd94985f5953a1647802ac312a798fe69.zip |
Improve accuracy of timeouts using premature timeouts
Improve accuracy of timeouts using a premature timeout then
return to sleep with a shorter timeout just before requested
timeout. This approach is only used on certain platforms where
we know it improves the accuracy of the timeouts, e.g. MacOS X.
Diffstat (limited to 'erts/include/internal')
-rw-r--r-- | erts/include/internal/erl_misc_utils.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/erts/include/internal/erl_misc_utils.h b/erts/include/internal/erl_misc_utils.h index a4a5d1d510..55566ddf74 100644 --- a/erts/include/internal/erl_misc_utils.h +++ b/erts/include/internal/erl_misc_utils.h @@ -56,4 +56,33 @@ int erts_map_win_error_to_errno(DWORD win_error); int erts_get_last_win_errno(void); #endif +#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__) +#define __DARWIN__ 1 +#endif + +/* + * ERTS_PREMATURE_TIMEOUT() expects time units + * 1000 (millisec), 1000000 (microsec), or + * 1000000000 (nanosec). Might not work properly + * otherwise. + */ +#undef ERTS_USE_PREMATURE_TIMEOUT +#undef ERTS_PREMATURE_TIMEOUT + +#if defined(__DARWIN__) +#define ERTS_USE_PREMATURE_TIMEOUT 1 +#define ERTS_PREMATURE_TIMEOUT(TMO, TU) \ + ((TMO) >= 1 * ((TU) / 1000) \ + ? ((TMO) >= 20 * ((TU) / 1000) \ + ? 15 * ((TU) / 1000) \ + : ((TMO) >= 5 * ((TU) / 1000) \ + ? 3 * ((TU) / 1000) \ + : 5 * ((TU) / 10000))) \ + : 0) + +#else +#define ERTS_USE_PREMATURE_TIMEOUT 0 +#define ERTS_PREMATURE_TIMEOUT(TMO, TU) (0) +#endif + #endif /* #ifndef ERL_MISC_UTILS_H_ */ |