Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:26
erlang
1971-Allow-dist-input_handler-to-be-added-if-th...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1971-Allow-dist-input_handler-to-be-added-if-the-dist-con.patch of Package erlang
From df872c1c70c710d3a848fe2d69dd1a721dd86123 Mon Sep 17 00:00:00 2001 From: Zeyu Zhang <zeyu@fb.com> Date: Sun, 9 Apr 2023 20:56:08 -0700 Subject: [PATCH 1/2] Allow dist input_handler to be added if the dist control is an internal port --- erts/doc/src/erlang.xml | 25 +++++++++++++++---------- erts/emulator/beam/dist.c | 4 ++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml index d7fa7b8149..3af27e7bea 100644 --- a/erts/doc/src/erlang.xml +++ b/erts/doc/src/erlang.xml @@ -1927,16 +1927,22 @@ end</code> channel. </p> <note><p> - Only the process registered as distribution - controller for the distribution channel identified by - <c><anno>DHandle</anno></c> is allowed to call this - function. + When the distribution controller for the distribution + channel identified by <c><anno>DHandle</anno></c> is a + process, it is the only process allowed to call this + function. + This function is also allowed to be called when the + distribution controller for the distribution channel + identified by <c><anno>DHandle</anno></c> is a port. + The data received by the port should in this case be delivered to + the process identified by <c><anno>InputHandler</anno></c> + which in turn should call + <seemfa marker="erlang#dist_ctrl_put_data/2"><c>erlang:dist_ctrl_put_data/2</c></seemfa>. </p></note> <p> This function is used when implementing an alternative - distribution carrier using processes as distribution - controllers. <c><anno>DHandle</anno></c> is retrieved - via the callback + distribution carrier. <c><anno>DHandle</anno></c> is + retrieved via the callback <seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>. More information can be found in the documentation of <seeguide marker="erts:alt_dist#distribution_module">ERTS @@ -1967,9 +1973,8 @@ end</code> </p></note> <p> This function is used when implementing an alternative - distribution carrier using processes as distribution - controllers. <c><anno>DHandle</anno></c> is retrieved - via the callback + distribution carrier. <c><anno>DHandle</anno></c> is + retrieved via the callback <seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>. More information can be found in the documentation of <seeguide marker="erts:alt_dist#distribution_module">ERTS diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c index ca6aa40185..9cee9f0678 100644 --- a/erts/emulator/beam/dist.c +++ b/erts/emulator/beam/dist.c @@ -4386,13 +4386,13 @@ dist_get_stat_1(BIF_ALIST_1) BIF_RETTYPE dist_ctrl_input_handler_2(BIF_ALIST_2) { - DistEntry *dep = ERTS_PROC_GET_DIST_ENTRY(BIF_P); Uint32 conn_id; + DistEntry *dep = erts_dhandle_to_dist_entry(BIF_ARG_1, &conn_id); if (!dep) BIF_ERROR(BIF_P, EXC_NOTSUP); - if (erts_dhandle_to_dist_entry(BIF_ARG_1, &conn_id) != dep) + if ((ERTS_PROC_GET_DIST_ENTRY(BIF_P) != dep) && !is_internal_port(dep->cid)) BIF_ERROR(BIF_P, BADARG); if (is_not_internal_pid(BIF_ARG_2)) -- 2.35.3
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