diff options
author | Siri Hansen <[email protected]> | 2012-03-05 11:43:08 +0100 |
---|---|---|
committer | Siri Hansen <[email protected]> | 2012-03-05 11:43:08 +0100 |
commit | 096ed7e301ce16dfb69709d7001ea3d5f370c202 (patch) | |
tree | d2a6f3dd000d2a1ce843d5c687498b9d43cc4879 /lib/stdlib/test/supervisor_deadlock.erl | |
parent | d1e67d51a6d754e5a055c81c9d7447e0d87e982f (diff) | |
parent | e6e31791abf090fe7e0bd3e5970b44830d087c4a (diff) | |
download | otp-096ed7e301ce16dfb69709d7001ea3d5f370c202.tar.gz otp-096ed7e301ce16dfb69709d7001ea3d5f370c202.tar.bz2 otp-096ed7e301ce16dfb69709d7001ea3d5f370c202.zip |
Merge branch 'siri/stdlib/hanging-restart-loop/OTP-9549' into maint
* siri/stdlib/hanging-restart-loop/OTP-9549:
Leave control back to gen_server during supervisor's restart loop
Diffstat (limited to 'lib/stdlib/test/supervisor_deadlock.erl')
-rw-r--r-- | lib/stdlib/test/supervisor_deadlock.erl | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/stdlib/test/supervisor_deadlock.erl b/lib/stdlib/test/supervisor_deadlock.erl new file mode 100644 index 0000000000..288547a972 --- /dev/null +++ b/lib/stdlib/test/supervisor_deadlock.erl @@ -0,0 +1,45 @@ +-module(supervisor_deadlock). +-compile(export_all). + + +%%%----------------------------------------------------------------- +%%% gen_server callbacks +init([child]) -> + case ets:lookup(supervisor_deadlock,fail_start) of + [{fail_start, false}] -> + %% we must not fail on the first init, otherwise supervisor + %% terminates immediately + {ok, []}; + [{fail_start, true}] -> + %% Restart frequency is MaxR=8, MaxT=10, so this will + %% ensure that restart intensity is not reached -> restart + %% loop + timer:sleep(2000), % NOTE: this could be a gen_server call timeout + + {stop, error} + end. + +handle_call(_Req, _From, State) -> + {reply, ok, State}. + +%% Force a restart +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_child() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [child], []). + +restart_child() -> + gen_server:cast(supervisor_deadlock, restart). |