Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0412-erts-Assert-enif_schedule_nif-1st-argument...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0412-erts-Assert-enif_schedule_nif-1st-argument-is-proces.patch of Package erlang
From 461dad8e28b741ea85cece8aa2862c0c8637ecf1 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson <sverker@erlang.org> Date: Mon, 8 Feb 2021 17:32:32 +0100 Subject: [PATCH 12/34] erts: Assert enif_schedule_nif 1st argument is process env --- erts/doc/src/erl_nif.xml | 16 ++++++++++++---- erts/emulator/beam/erl_nif.c | 5 +++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml index d2a1581e35..8797034623 100644 --- a/erts/doc/src/erl_nif.xml +++ b/erts/doc/src/erl_nif.xml @@ -3061,10 +3061,11 @@ enif_map_iterator_destroy(env, &iter);</code> </func> <func> - <name since="OTP 17.3"><ret>ERL_NIF_TERM</ret><nametext>enif_schedule_nif(ErlNifEnv* env, - const char* fun_name, int flags, ERL_NIF_TERM (*fp)(ErlNifEnv* env, int - argc, const ERL_NIF_TERM argv[]), int argc, const ERL_NIF_TERM - argv[])</nametext></name> + <name since="OTP 17.3"><ret>ERL_NIF_TERM</ret><nametext>enif_schedule_nif( + ErlNifEnv* caller_env, const char* fun_name, int flags, + ERL_NIF_TERM (*fp)(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]), + int argc, const ERL_NIF_TERM argv[])</nametext> + </name> <fsummary>Schedule a NIF for execution.</fsummary> <desc> <p>Schedules NIF <c>fp</c> to execute. This function allows an @@ -3072,6 +3073,13 @@ enif_map_iterator_destroy(env, &iter);</code> calls or to schedule a <seecref marker="#dirty_nifs"> dirty NIF</seecref> to execute on a dirty scheduler thread.</p> <taglist> + <tag><c>caller_env</c></tag> + <item> + <p> + Must be <seecref marker="#proc_bound_env">process bound</seecref> + environment of the calling NIF. + </p> + </item> <tag><c>fun_name</c></tag> <item> <p>Provides a name for the NIF that is scheduled for execution. diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index 9b825c4739..357dd3658d 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -337,6 +337,8 @@ schedule(ErlNifEnv* env, NativeFunPtr direct_fp, NativeFunPtr indirect_fp, Process *c_p, *dirty_shadow_proc; execution_state(env, &c_p, NULL); + ASSERT(c_p); + if (c_p == env->proc) dirty_shadow_proc = NULL; else @@ -3064,6 +3066,7 @@ static_schedule_dirty_nif(ErlNifEnv* env, erts_aint32_t dirty_psflg, NativeFunPtr fp; execution_state(env, &proc, NULL); + ASSERT(proc); /* * Called in order to schedule statically determined @@ -3170,6 +3173,8 @@ enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags, return fun_name_atom; execution_state(env, &proc, &scheduler); + ASSERT(proc); + if (scheduler <= 0) { if (scheduler == 0) 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