aboutsummaryrefslogtreecommitdiffstats
path: root/lib/sasl/src
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2014-10-15 18:31:13 +0200
committerSiri Hansen <[email protected]>2014-10-20 12:41:02 +0200
commita4290bb363fb6f1c593886d4f10a5868d7c9d3b8 (patch)
treefe488d7d2c9867147ce8f8b53ea128d91d4e9c00 /lib/sasl/src
parent7c4237e6d34b23020fca983731a3c7f07a10a8b5 (diff)
downloadotp-a4290bb363fb6f1c593886d4f10a5868d7c9d3b8.tar.gz
otp-a4290bb363fb6f1c593886d4f10a5868d7c9d3b8.tar.bz2
otp-a4290bb363fb6f1c593886d4f10a5868d7c9d3b8.zip
[sasl] Remove undocumented upgrade instruction
The upgrade instruction 'remove_module' was added in OTP R7B (and possibly in a patch in R5B or R6B, ticket OTP-3477), and translates to the low level instruction 'remove', but adds the parameter DepMods (modules on which Mod is dependent). The ticket says that "remove_module should be added for symmetry with the add_module instruction". remove_module was never documented or tested, and it was never mentioned in a release note. It therefore seems to be low risk in removing it. The correct instruction to use when removing a module is {delete_module,Mod} which was added in OTP R10B and which is also documented and tested. This translates to low level instructions 'remove' and 'purge' i.e. the module is brutally purged after setting the current code to old. This hardcoded brutal purge is the reason why PrePurge and PostPurge parameters can not be given with the delete_module instruction. The parameter DepMods which was inclued in the remove_module instruction does not exist for delete_module. From the documentation's point of view, this is the same for add_module, and thus the two instructions {add_module,Mod} and {delete_module,Mod} are now symmetric. However, in the code there is a second instruction for adding a module, {add_module,Mod,DepMods}, which is not documented. To add symmetry even for this, {delete_module,Mod,DepMods} is now also added. Documentation is added for all instructions.
Diffstat (limited to 'lib/sasl/src')
-rw-r--r--lib/sasl/src/systools_rc.erl28
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/sasl/src/systools_rc.erl b/lib/sasl/src/systools_rc.erl
index 76f753c3d0..11e097996c 100644
--- a/lib/sasl/src/systools_rc.erl
+++ b/lib/sasl/src/systools_rc.erl
@@ -32,7 +32,6 @@
%% {load_module, Mod, PrePurge, PostPurge, [Mod]}
%% {add_module, Mod}
%% {add_module, Mod, [Mod]}
-%% {remove_module, Mod, PrePurge, PostPurge, [Mod]}
%% {restart_application, Appl}
%% {add_application, Appl, Type}
%% {remove_application, Appl}
@@ -59,7 +58,7 @@
%% High-level instructions that contain dependencies
%%
--define(DEP_INSTRS, [update, load_module, add_module, remove_module]).
+-define(DEP_INSTRS, [update, load_module, add_module, delete_module]).
%%-----------------------------------------------------------------
%% translate_scripts(Scripts, Appls, PreAppls) -> Res
@@ -107,9 +106,6 @@ expand_script([I|Script]) ->
{update, Mod, Change, Mods} when Change==soft,
is_list(Mods) ->
{update, Mod, Change, brutal_purge,brutal_purge, Mods};
- {delete_module, Mod} ->
- [{remove, {Mod, brutal_purge, brutal_purge}},
- {purge, [Mod]}];
{add_application, Application} ->
{add_application, Application, permanent};
_ ->
@@ -301,6 +297,8 @@ normalize_instrs(Script) ->
PostPurge, Mods};
({add_module, Mod}) ->
{add_module, Mod, []};
+ ({delete_module, Mod}) ->
+ {delete_module, Mod, []};
(I) ->
I
end, Script).
@@ -412,7 +410,7 @@ translate_add_module_instrs(Before, After) ->
%%-----------------------------------------------------------------
%%-----------------------------------------------------------------
-%% Translates update, load_module and remove_module, and reorder the
+%% Translates update, load_module and delete_module, and reorder the
%% instructions according to dependencies. Leaves other instructions
%% unchanged.
%%-----------------------------------------------------------------
@@ -538,7 +536,7 @@ get_dependent_instructions(G, WCs, Mod) ->
%% Instructions are in order of dependency.
%% Appls = [#application]
%%
-%% Instructions translated are: update, load_module, and remove_module
+%% Instructions translated are: update, load_module, and delete_module
%%
%% Before = [{load_object_code, ...}]
%% After = [{suspend, ...}] ++ CodeInstrs ++ [{resume, ...}]
@@ -576,17 +574,19 @@ translate_dep_to_low(Mode, Instructions, Appls) ->
end, RevUpdateMods)}]
end,
- LoadRemoveInstrs =
+ LoadRemoveInstrs0 =
filtermap(fun({update, Mod, _, _, _, PreP, PostP, _}) ->
{true, {load, {Mod, PreP, PostP}}};
({load_module, Mod, PreP, PostP, _}) ->
{true, {load, {Mod, PreP, PostP}}};
- ({remove_module, Mod, PreP, PostP, _}) ->
- {true, {remove, {Mod, PreP, PostP}}};
+ ({delete_module, Mod, _}) ->
+ {true,[{remove, {Mod, brutal_purge, brutal_purge}},
+ {purge, [Mod]}]};
(_) -> false
end,
Instructions),
- RevLoadRemoveInstrs = lists:reverse(LoadRemoveInstrs),
+ LoadRemoveInstrs = lists:flatten(LoadRemoveInstrs0),
+ RevLoadRemoveInstrs = lists:flatten(lists:reverse(LoadRemoveInstrs0)),
%% The order of loading object code is unimportant. The order
%% chosen is the order of dependency.
@@ -781,10 +781,10 @@ check_op({add_module, Mod, Mods}) ->
check_mod(Mod),
check_list(Mods),
lists:foreach(fun(M) -> check_mod(M) end, Mods);
-check_op({remove_module, Mod, PrePurge, PostPurge, Mods}) ->
+check_op({delete_module, Mod}) ->
+ check_mod(Mod);
+check_op({delete_module, Mod, Mods}) ->
check_mod(Mod),
- check_purge(PrePurge),
- check_purge(PostPurge),
check_list(Mods),
lists:foreach(fun(M) -> check_mod(M) end, Mods);
check_op({remove_application, Appl}) ->