diff options
author | Siri Hansen <[email protected]> | 2011-11-16 11:18:17 +0100 |
---|---|---|
committer | Siri Hansen <[email protected]> | 2011-11-16 15:02:25 +0100 |
commit | 77ffc0d747f913c47d9e5305907a407d87883ba2 (patch) | |
tree | ee2234c9272fb84fbe8a443f36526ab45fa3d909 /lib/kernel/test/application_SUITE_data/deadlock | |
parent | 96fcb3f864f787fd3d74f20189eed7a1aba81cb4 (diff) | |
download | otp-77ffc0d747f913c47d9e5305907a407d87883ba2.tar.gz otp-77ffc0d747f913c47d9e5305907a407d87883ba2.tar.bz2 otp-77ffc0d747f913c47d9e5305907a407d87883ba2.zip |
Add documentation and test for kernel env var shutdown_timeout
Diffstat (limited to 'lib/kernel/test/application_SUITE_data/deadlock')
-rw-r--r-- | lib/kernel/test/application_SUITE_data/deadlock/deadlock.app | 8 | ||||
-rw-r--r-- | lib/kernel/test/application_SUITE_data/deadlock/deadlock.erl | 69 |
2 files changed, 77 insertions, 0 deletions
diff --git a/lib/kernel/test/application_SUITE_data/deadlock/deadlock.app b/lib/kernel/test/application_SUITE_data/deadlock/deadlock.app new file mode 100644 index 0000000000..0c1001bed6 --- /dev/null +++ b/lib/kernel/test/application_SUITE_data/deadlock/deadlock.app @@ -0,0 +1,8 @@ +{application, deadlock, [ + {vsn, "1"}, + {registered, []}, + {applications, [kernel, stdlib, sasl]}, + {modules, [deadlock]}, + {mod, {deadlock, []}}, + {env, [{fail_start, false}]} +]}. diff --git a/lib/kernel/test/application_SUITE_data/deadlock/deadlock.erl b/lib/kernel/test/application_SUITE_data/deadlock/deadlock.erl new file mode 100644 index 0000000000..5f68bf9078 --- /dev/null +++ b/lib/kernel/test/application_SUITE_data/deadlock/deadlock.erl @@ -0,0 +1,69 @@ +-module(deadlock). +-behaviour(application). +-compile(export_all). +-define(SUP,deadlock_sup). +-define(CHILD,deadlock_child). + + +%%%----------------------------------------------------------------- +%%% application callbacks +start(_StartType, _StartArgs) -> + supervisor:start_link({local, ?SUP}, ?MODULE, [sup]). + +stop(_State) -> + ok. + + + +%%%----------------------------------------------------------------- +%%% supervisor callbacks +init([sup]) -> + {ok, {{one_for_one, 5, 10}, [ + { + sasl_syslog_dm, {?MODULE, start_link, []}, + permanent, brutal_kill, worker, + [deadlock] + } + ]}}; + + +%%%----------------------------------------------------------------- +%%% gen_server callbacks +init([child]) -> + case application:get_env(deadlock, fail_start) of + {ok, false} -> + %% we must not fail on the first init, otherwise supervisor + %% terminates immediately + {ok, []}; + {ok, true} -> + timer:sleep(infinity), % init hangs!!!! + {ok, []} + end. + +handle_call(_Req, _From, State) -> + {reply, ok, State}. + +handle_cast(restart, State) -> + {stop, error, State}. + +handle_info(_Msg, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + + +%%%----------------------------------------------------------------- +%%% Start child +start_link() -> + gen_server:start_link({local, ?CHILD}, ?MODULE, [child], []). + + +%%%----------------------------------------------------------------- +%%% Provoke hanging +restart_and_fail() -> + application:set_env(deadlock, fail_start, true), % next init will hang + gen_server:cast(?CHILD, restart). |