diff options
author | Erlang/OTP <[email protected]> | 2017-11-09 16:15:40 +0100 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2017-11-09 16:15:40 +0100 |
commit | 0a3d5ad6f2dec30f450e1a29f1150a139cd4777f (patch) | |
tree | 2f5cd0eddab55f34d7c938f2a5fb05e1638daa73 /erts/emulator/beam/erl_msacc.h | |
parent | cc1af3d197c6f5ad411939b30f5aa8e9801b5fc0 (diff) | |
parent | 62001839d5cd4187538a750752b3d7a30db4e2c8 (diff) | |
download | otp-0a3d5ad6f2dec30f450e1a29f1150a139cd4777f.tar.gz otp-0a3d5ad6f2dec30f450e1a29f1150a139cd4777f.tar.bz2 otp-0a3d5ad6f2dec30f450e1a29f1150a139cd4777f.zip |
Merge branch 'john/erts/msacc-dirty-schedulers/OTP-14707' into maint-20
* john/erts/msacc-dirty-schedulers/OTP-14707:
Stop assuming that all schedulers are managed when updating msacc
Diffstat (limited to 'erts/emulator/beam/erl_msacc.h')
-rw-r--r-- | erts/emulator/beam/erl_msacc.h | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/erts/emulator/beam/erl_msacc.h b/erts/emulator/beam/erl_msacc.h index d64ef8c8b9..3f6273f214 100644 --- a/erts/emulator/beam/erl_msacc.h +++ b/erts/emulator/beam/erl_msacc.h @@ -279,18 +279,32 @@ void erts_msacc_init_thread(char *type, int id, int liberty); #define ERTS_MSACC_PUSH_STATE_M() \ ERTS_MSACC_DECLARE_CACHE(); \ ERTS_MSACC_PUSH_STATE_CACHED_M() -#define ERTS_MSACC_PUSH_STATE_CACHED_M() \ - __erts_msacc_state = ERTS_MSACC_IS_ENABLED_CACHED() ? \ - erts_msacc_get_state_m__(__erts_msacc_cache) : ERTS_MSACC_STATE_OTHER +#define ERTS_MSACC_PUSH_STATE_CACHED_M() \ + do { \ + if (ERTS_MSACC_IS_ENABLED_CACHED()) { \ + ASSERT(!__erts_msacc_cache->unmanaged); \ + __erts_msacc_state = erts_msacc_get_state_m__(__erts_msacc_cache); \ + } else { \ + __erts_msacc_state = ERTS_MSACC_STATE_OTHER; \ + } \ + } while(0) #define ERTS_MSACC_SET_STATE_M(state) \ ERTS_MSACC_DECLARE_CACHE(); \ ERTS_MSACC_SET_STATE_CACHED_M(state) -#define ERTS_MSACC_SET_STATE_CACHED_M(state) \ - if (ERTS_MSACC_IS_ENABLED_CACHED()) \ - erts_msacc_set_state_m__(__erts_msacc_cache, state, 1) -#define ERTS_MSACC_POP_STATE_M() \ - if (ERTS_MSACC_IS_ENABLED_CACHED()) \ - erts_msacc_set_state_m__(__erts_msacc_cache, __erts_msacc_state, 0) +#define ERTS_MSACC_SET_STATE_CACHED_M(state) \ + do { \ + if (ERTS_MSACC_IS_ENABLED_CACHED()) { \ + ASSERT(!__erts_msacc_cache->unmanaged); \ + erts_msacc_set_state_m__(__erts_msacc_cache, state, 1); \ + } \ + } while(0) +#define ERTS_MSACC_POP_STATE_M() \ + do { \ + if (ERTS_MSACC_IS_ENABLED_CACHED()) { \ + ASSERT(!__erts_msacc_cache->unmanaged); \ + erts_msacc_set_state_m__(__erts_msacc_cache, __erts_msacc_state, 0); \ + } \ + } while(0) #define ERTS_MSACC_PUSH_AND_SET_STATE_M(state) \ ERTS_MSACC_PUSH_STATE_M(); ERTS_MSACC_SET_STATE_CACHED_M(state) |