diff options
author | Rickard Green <[email protected]> | 2016-06-08 15:36:07 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2016-06-08 15:36:07 +0200 |
commit | 8de8b36d4a19a79dd1bd1b49a4c394348edd9eac (patch) | |
tree | 2e59ec2743f3bcfe7629fcbc7b199ffebc8eed89 /erts/emulator/beam/erl_nif.c | |
parent | ce33a24033cc8c4cea735b5f2898708ce34f546d (diff) | |
parent | 77192f7f32d4bbe293a6e8cb9da79b8a6dd6b181 (diff) | |
download | otp-8de8b36d4a19a79dd1bd1b49a4c394348edd9eac.tar.gz otp-8de8b36d4a19a79dd1bd1b49a4c394348edd9eac.tar.bz2 otp-8de8b36d4a19a79dd1bd1b49a4c394348edd9eac.zip |
Merge branch 'rickard/misc-ds'
* rickard/misc-ds:
Replace enif_is_on_dirty_scheduler() with enif_thread_type()
No GC on dirty IO schedulers
Diffstat (limited to 'erts/emulator/beam/erl_nif.c')
-rw-r--r-- | erts/emulator/beam/erl_nif.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index 4fd82bad10..039f97ef43 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -2658,18 +2658,21 @@ done: } int -enif_is_on_dirty_scheduler(ErlNifEnv* env) +enif_thread_type(void) { - int scheduler; - Process *c_p; + ErtsSchedulerData *esdp = erts_get_scheduler_data(); - execution_state(env, &c_p, &scheduler); + if (!esdp) + return ERL_NIF_THR_UNDEFINED; + + if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) + return ERL_NIF_THR_NORMAL_SCHEDULER; - if (!c_p || !scheduler) - erts_exit(ERTS_ABORT_EXIT, "enif_is_on_dirty_scheduler: " - "Invalid env"); + if (ERTS_SCHEDULER_IS_DIRTY_CPU(esdp)) + return ERL_NIF_THR_DIRTY_CPU_SCHEDULER; - return scheduler < 0; + ASSERT(ERTS_SCHEDULER_IS_DIRTY_IO(esdp)); + return ERL_NIF_THR_DIRTY_IO_SCHEDULER; } /* Maps */ |