diff options
author | Rickard Green <[email protected]> | 2016-07-20 15:48:27 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2016-07-20 15:48:27 +0200 |
commit | 2c8a13e5d3aabeedeb290624d6acc02d25db1bd5 (patch) | |
tree | 691f18cbf9b52874c55ba3be0485674cfd7f25a1 /erts/emulator/beam/erl_process.h | |
parent | b490fb8664ec6e5ceaadc1c74350dc666f5406d2 (diff) | |
download | otp-2c8a13e5d3aabeedeb290624d6acc02d25db1bd5.tar.gz otp-2c8a13e5d3aabeedeb290624d6acc02d25db1bd5.tar.bz2 otp-2c8a13e5d3aabeedeb290624d6acc02d25db1bd5.zip |
Fix dirty schedulers build on windows
Diffstat (limited to 'erts/emulator/beam/erl_process.h')
-rw-r--r-- | erts/emulator/beam/erl_process.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h index 7c98b60647..d134fe913f 100644 --- a/erts/emulator/beam/erl_process.h +++ b/erts/emulator/beam/erl_process.h @@ -2474,6 +2474,35 @@ erts_get_atom_cache_map(Process *c_p) } #endif +#ifdef __WIN32__ +/* + * Don't want erts_time2reds() inlined in beam_emu.c on windows since + * it is compiled with gcc which fails on it. Implementation is in + * erl_process.c on windows. + */ +# define ERTS_TIME2REDS_IMPL__ erts_time2reds__ +#else +# define ERTS_TIME2REDS_IMPL__ erts_time2reds +#endif + +ERTS_GLB_INLINE Sint64 ERTS_TIME2REDS_IMPL__(ErtsMonotonicTime start, + ErtsMonotonicTime end); + +#if ERTS_GLB_INLINE_INCL_FUNC_DEF +ERTS_GLB_INLINE Sint64 +ERTS_TIME2REDS_IMPL__(ErtsMonotonicTime start, ErtsMonotonicTime end) +{ + ErtsMonotonicTime time = end - start; + ASSERT(time >= 0); + time = ERTS_MONOTONIC_TO_USEC(time); + if (time == 0) + return (Sint64) 1; /* At least one reduction */ + /* Currently two reductions per micro second */ + time *= (CONTEXT_REDS-1)/1000 + 1; + return (Sint64) time; +} +#endif + Process *erts_pid2proc_suspend(Process *, ErtsProcLocks, Eterm, |