Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0413-erts-Refactor-away-function-schedule_dirty...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0413-erts-Refactor-away-function-schedule_dirty_nif.patch of Package erlang
From 087afc13b4fa69d8c67e5f009371bab239a4fb48 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson <sverker@erlang.org> Date: Mon, 8 Feb 2021 18:19:14 +0100 Subject: [PATCH 13/34] erts: Refactor away function schedule_dirty_nif() Called once, doesn't do much. --- erts/emulator/beam/erl_nif.c | 37 ++++++++---------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index 357dd3658d..661672f64a 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -3028,34 +3028,6 @@ dirty_nif_exception(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) return ret; } -/* - * Dirty NIF scheduling wrapper function. Schedule a dirty NIF to execute. - * The dirty scheduler thread type (CPU or I/O) is indicated in flags - * parameter. - */ -static ERTS_INLINE ERL_NIF_TERM -schedule_dirty_nif(ErlNifEnv* env, int flags, NativeFunPtr fp, - Eterm func_name, int argc, const ERL_NIF_TERM argv[]) -{ - Process* proc; - - ASSERT(is_atom(func_name)); - ASSERT(fp); - - ASSERT(flags==ERL_NIF_DIRTY_JOB_IO_BOUND || flags==ERL_NIF_DIRTY_JOB_CPU_BOUND); - - execution_state(env, &proc, NULL); - - (void) erts_atomic32_read_bset_nob(&proc->state, - (ERTS_PSFLG_DIRTY_CPU_PROC - | ERTS_PSFLG_DIRTY_IO_PROC), - (flags == ERL_NIF_DIRTY_JOB_CPU_BOUND - ? ERTS_PSFLG_DIRTY_CPU_PROC - : ERTS_PSFLG_DIRTY_IO_PROC)); - - return schedule(env, fp, NULL, proc->current->module, func_name, argc, argv); -} - static ERTS_INLINE ERL_NIF_TERM static_schedule_dirty_nif(ErlNifEnv* env, erts_aint32_t dirty_psflg, int argc, const ERL_NIF_TERM argv[]) @@ -3185,7 +3157,14 @@ enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags, result = schedule(env, execute_nif, fp, proc->current->module, fun_name_atom, argc, argv); else if (!(flags & ~(ERL_NIF_DIRTY_JOB_IO_BOUND|ERL_NIF_DIRTY_JOB_CPU_BOUND))) { - result = schedule_dirty_nif(env, flags, fp, fun_name_atom, argc, argv); + (void) erts_atomic32_read_bset_nob(&proc->state, + (ERTS_PSFLG_DIRTY_CPU_PROC + | ERTS_PSFLG_DIRTY_IO_PROC), + (flags == ERL_NIF_DIRTY_JOB_CPU_BOUND + ? ERTS_PSFLG_DIRTY_CPU_PROC + : ERTS_PSFLG_DIRTY_IO_PROC)); + result = schedule(env, fp, NULL, proc->current->module, fun_name_atom, + argc, argv); } else result = enif_make_badarg(env); -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor