File 4551-Refine-error-reasons-for-bad-combinations-of-supervi.patch of Package erlang

From 53604523b3a876fc6dc16adcce710efcea530d31 Mon Sep 17 00:00:00 2001
From: juhlig <juhlig@hnc-agency.org>
Date: Mon, 19 Apr 2021 11:39:48 +0200
Subject: [PATCH] Refine error reasons for bad combinations of supervisor
 options

---
 lib/stdlib/src/supervisor.erl        |  6 +++---
 lib/stdlib/test/supervisor_SUITE.erl | 25 ++++++++++++++-----------
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/lib/stdlib/src/supervisor.erl b/lib/stdlib/src/supervisor.erl
index 1ee7f1bd35..7053ee1e30 100644
--- a/lib/stdlib/src/supervisor.erl
+++ b/lib/stdlib/src/supervisor.erl
@@ -1444,10 +1444,10 @@ validRestartType(temporary)   -> true;
 validRestartType(transient)   -> true;
 validRestartType(RestartType) -> throw({invalid_restart_type, RestartType}).
 
-validSignificant(true, permanent, _AutoShutdown) ->
-    throw({invalid_significant, true});
 validSignificant(true, _RestartType, never) ->
-    throw({invalid_significant, true});
+    throw({bad_combination, [{auto_shutdown, never}, {significant, true}]});
+validSignificant(true, permanent, _AutoShutdown) ->
+    throw({bad_combination, [{restart, permanent}, {significant, true}]});
 validSignificant(Significant, _RestartType, _AutoShutdown)
   when is_boolean(Significant) ->
     true;
diff --git a/lib/stdlib/test/supervisor_SUITE.erl b/lib/stdlib/test/supervisor_SUITE.erl
index 65f5c054e1..724933f3dd 100644
--- a/lib/stdlib/test/supervisor_SUITE.erl
+++ b/lib/stdlib/test/supervisor_SUITE.erl
@@ -811,16 +811,19 @@ child_specs_map(Config) when is_list(Config) ->
 	fun
 	    ({never, ChildSpec = #{significant := true}}) ->
 		ChildSpec1 = CSFilter(ChildSpec),
-		{error, {invalid_significant, true}} =
-		    supervisor:check_childspecs([ChildSpec1], never);
+		{error, {bad_combination, BadOpts}} =
+		    supervisor:check_childspecs([ChildSpec1], never),
+		[{auto_shutdown, never}, {significant, true}] = lists:sort(BadOpts);
 	    ({AutoShutdown, ChildSpec = #{restart := undefined, significant := true}}) ->
 		ChildSpec1 = CSFilter(ChildSpec),
-		{error, {invalid_significant, true}} =
-		    supervisor:check_childspecs([ChildSpec1], AutoShutdown);
+		{error, {bad_combination, BadOpts}} =
+		    supervisor:check_childspecs([ChildSpec1], AutoShutdown),
+		[{restart, permanent}, {significant, true}] = lists:sort(BadOpts);
 	    ({AutoShutdown, ChildSpec = #{restart := permanent, significant := true}}) ->
 		ChildSpec1 = CSFilter(ChildSpec),
-		{error, {invalid_significant, true}} =
-		    supervisor:check_childspecs([ChildSpec1], AutoShutdown);
+		{error, {bad_combination, BadOpts}} =
+		    supervisor:check_childspecs([ChildSpec1], AutoShutdown),
+		[{restart, permanent}, {significant, true}] = lists:sort(BadOpts);
 	    ({AutoShutdown, ChildSpec}) ->
 		ChildSpec1 = CSFilter(ChildSpec),
 		ok = supervisor:check_childspecs([ChildSpec1], AutoShutdown)
@@ -861,7 +864,7 @@ child_specs_map(Config) when is_list(Config) ->
 	start_link({ok, {{simple_one_for_one, 2, 3600}, [CS0,CS0]}}),
 
     %% auto_shutdown => never should not accept significant children
-    {error, {start_spec, {invalid_significant, true}}} =
+    {error, {start_spec, {bad_combination, _}}} =
 	start_link({ok, {#{auto_shutdown => never}, [CS0#{significant => true}]}}),
 
     ok.
@@ -3310,7 +3313,7 @@ significant_upgrade_never_any(_Config) ->
 	       restart => transient,
 	       significant => true},
     {ok, Sup1} = start_link({ok, {#{auto_shutdown => never}, []}}),
-    {error, {invalid_significant, true}} = supervisor:start_child(Sup1, Child1),
+    {error, {bad_combination, _}} = supervisor:start_child(Sup1, Child1),
     S1 = sys:get_state(Sup1),
     ok = fake_upgrade(Sup1, {ok, {#{auto_shutdown => any_significant}, []}}),
     S2 = sys:get_state(Sup1),
@@ -3343,7 +3346,7 @@ significant_upgrade_any_never(_Config) ->
     true = (S1 /= S2),
     error = check_exit([ChildPid1], 1000),
     error = check_exit([Sup1], 1000),
-    {error, {invalid_significant, true}} = supervisor:start_child(Sup1, Child2),
+    {error, {bad_combination, _}} = supervisor:start_child(Sup1, Child2),
     terminate(ChildPid1, normal),
     ok = check_exit([ChildPid1]),
     error = check_exit([Sup1], 1000),
@@ -3365,7 +3368,7 @@ significant_upgrade_never_all(_Config) ->
 	       restart => transient,
 	       significant => true},
     {ok, Sup1} = start_link({ok, {#{auto_shutdown => never}, []}}),
-    {error, {invalid_significant, true}} = supervisor:start_child(Sup1, Child1),
+    {error, {bad_combination, _}} = supervisor:start_child(Sup1, Child1),
     S1 = sys:get_state(Sup1),
     ok = fake_upgrade(Sup1, {ok, {#{auto_shutdown => all_significant}, []}}),
     S2 = sys:get_state(Sup1),
@@ -3402,7 +3405,7 @@ significant_upgrade_all_never(_Config) ->
     true = (S1 /= S2),
     error = check_exit([ChildPid1], 1000),
     error = check_exit([Sup1], 1000),
-    {error, {invalid_significant, true}} = supervisor:start_child(Sup1, Child2),
+    {error, {bad_combination, _}} = supervisor:start_child(Sup1, Child2),
     terminate(ChildPid1, normal),
     ok = check_exit([ChildPid1]),
     error = check_exit([Sup1], 1000),
-- 
2.26.2

openSUSE Build Service is sponsored by