From 7fb3ed7d2731050186eb5224fe8e6050e4909341 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Mon, 26 Feb 2018 20:40:51 +0100 Subject: erts,kernel: Add dist_util:strict_order_flags/0 to replace DFLAGS_STRICT_ORDER_DELIVERY and remove that compile time dependency. --- erts/doc/src/alt_dist.xml | 11 +++++------ erts/doc/src/erl_dist_protocol.xml | 7 +++---- erts/emulator/beam/dist.c | 12 +++++++----- erts/emulator/beam/dist.h | 2 ++ erts/preloaded/ebin/erts_internal.beam | Bin 14100 -> 14104 bytes erts/preloaded/src/erts_internal.erl | 3 ++- 6 files changed, 19 insertions(+), 16 deletions(-) (limited to 'erts') diff --git a/erts/doc/src/alt_dist.xml b/erts/doc/src/alt_dist.xml index d3731a5391..92d40d8558 100644 --- a/erts/doc/src/alt_dist.xml +++ b/erts/doc/src/alt_dist.xml @@ -782,10 +782,9 @@ DFLAG_DIST_HDR_ATOM_CACHE Do not use atom cache over this connection. - DFLAGS_STRICT_ORDER_DELIVERY - Do not use any features that require strict - order delivery. +

Use function dist_util:strict_order_flags/0 to get all flags + for features that require strict order delivery.

This flag field is optional.

@@ -819,9 +818,9 @@

The data delivery order can be relaxed by disabling features that require strict ordering. This is done by - passing the ?DFLAGS_STRICT_ORDER_DELIVERY - distribution - flags in the + passing the + distribution flags + returned by dist_util:strict_order_flags/0 in the reject_flags field of the #hs_data{} record used when setting up the connection. When relaxed diff --git a/erts/doc/src/erl_dist_protocol.xml b/erts/doc/src/erl_dist_protocol.xml index a78b13aaa4..98a9a76b60 100644 --- a/erts/doc/src/erl_dist_protocol.xml +++ b/erts/doc/src/erl_dist_protocol.xml @@ -849,10 +849,9 @@ DiB == gen_digest(ChA, ICA)?

- There are also a collection of DFLAGs bitwise or:ed - together in the DFLAGS_STRICT_ORDER_DELIVERY macro. - These flags corresponds to features that require strict - ordering of data over distribution channels. + There is also function dist_util:strict_order_flags/0 + returning all flags (bitwise or:ed together) corresponding to features + that require strict ordering of data over distribution channels.

diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c index 6f122273dc..c08a8ec832 100644 --- a/erts/emulator/beam/dist.c +++ b/erts/emulator/beam/dist.c @@ -644,7 +644,8 @@ trap_function(Eterm func, int arity) /* * Sync with dist_util.erl: * - * -record(erts_dflags, {default, mandatory, addable, rejectable}). + * -record(erts_dflags, + * {default, mandatory, addable, rejectable, strict_order}). */ static Eterm erts_dflags_record; @@ -665,13 +666,14 @@ void init_dist(void) am_dist_ctrl_put_data, 2); { - Eterm* hp = erts_alloc(ERTS_ALC_T_LITERAL, (1+5)*sizeof(Eterm)); - erts_dflags_record = TUPLE5(hp, am_erts_dflags, + Eterm* hp = erts_alloc(ERTS_ALC_T_LITERAL, (1+6)*sizeof(Eterm)); + erts_dflags_record = TUPLE6(hp, am_erts_dflags, make_small(DFLAG_DIST_DEFAULT), make_small(DFLAG_DIST_MANDATORY), make_small(DFLAG_DIST_ADDABLE), - make_small(DFLAG_DIST_REJECTABLE)); - erts_set_literal_tag(&erts_dflags_record, hp, (1+5)); + make_small(DFLAG_DIST_REJECTABLE), + make_small(DFLAG_DIST_STRICT_ORDER)); + erts_set_literal_tag(&erts_dflags_record, hp, (1+6)); } } diff --git a/erts/emulator/beam/dist.h b/erts/emulator/beam/dist.h index 202457bb3b..e8dcdb669d 100644 --- a/erts/emulator/beam/dist.h +++ b/erts/emulator/beam/dist.h @@ -84,6 +84,8 @@ | DFLAG_HIDDEN_ATOM_CACHE \ | DFLAG_ATOM_CACHE) +/* Flags for all features needing strict order delivery */ +#define DFLAG_DIST_STRICT_ORDER DFLAG_DIST_HDR_ATOM_CACHE /* All flags that should be enabled when term_to_binary/1 is used. */ #define TERM_TO_BINARY_DFLAGS (DFLAG_EXTENDED_REFERENCES \ diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam index 7206b0415d..b79f734a6d 100644 Binary files a/erts/preloaded/ebin/erts_internal.beam and b/erts/preloaded/ebin/erts_internal.beam differ diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl index 291a8e8fa8..a51c0c4c0e 100644 --- a/erts/preloaded/src/erts_internal.erl +++ b/erts/preloaded/src/erts_internal.erl @@ -511,7 +511,8 @@ dist_ctrl_put_data(DHandle, IoList) -> end. --spec erts_internal:get_dflags() -> {erts_dflags,integer(),integer(),integer(),integer()}. +-spec erts_internal:get_dflags() -> {erts_dflags, integer(), integer(), + integer(), integer(), integer()}. get_dflags() -> erlang:nif_error(undefined). -- cgit v1.2.3