File 0254-Explain-continue-Continue-in-gen_server-Module-init-.patch of Package erlang
From aa4b32bb10c4e1f5dc79d4c9f0088faf6bf60d25 Mon Sep 17 00:00:00 2001
From: ergl <ergl@users.noreply.github.com>
Date: Thu, 28 Jan 2021 13:32:40 +0100
Subject: [PATCH] Explain {continue,Continue} in gen_server:Module:init/1 doc
Also, make clear in the code that the third term returned by
Module:init/1 can more than just a timeout.
---
lib/stdlib/doc/src/gen_server.xml | 11 ++++++++---
lib/stdlib/src/gen_server.erl | 5 +++--
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/lib/stdlib/doc/src/gen_server.xml b/lib/stdlib/doc/src/gen_server.xml
index 5863bfe3a4..226fcdaf60 100644
--- a/lib/stdlib/doc/src/gen_server.xml
+++ b/lib/stdlib/doc/src/gen_server.xml
@@ -1027,9 +1027,10 @@ gen_server:abcast -----> Module:handle_cast/2
<p><c>Args</c> is the <c>Args</c> argument provided to the start
function.</p>
<p>If the initialization is successful, the function is to
- return <c>{ok,State}</c>, <c>{ok,State,Timeout}</c>, or
- <c>{ok,State,hibernate}</c>, where <c>State</c> is the internal
- state of the <c>gen_server</c> process.</p>
+ return <c>{ok,State}</c>, <c>{ok,State,Timeout}</c>,
+ <c>{ok,State,hibernate}</c>, or <c>{ok,State,{continue,Continue}}</c>
+ where <c>State</c> is the internal state of the <c>gen_server</c>
+ process.</p>
<p>If an integer time-out value is provided, a time-out occurs
unless a request or a message is received within
<c>Timeout</c> milliseconds. A time-out is represented by
@@ -1043,6 +1044,10 @@ gen_server:abcast -----> Module:handle_cast/2
hibernation when waiting for the next message to arrive (by calling
<seemfa marker="proc_lib#hibernate/3">
<c>proc_lib:hibernate/3</c></seemfa>).</p>
+ <p>If <c>{continue,Continue}</c> is specified, the process will
+ execute the <seemfa marker="#Module:handle_continue/2">
+ <c>Module:handle_continue/2</c></seemfa> callback function, with
+ <c>Continue</c> as the first argument.</p>
<p>If the initialization fails, the function is to return
<c>{stop,Reason}</c>, where <c>Reason</c> is any term, or
<c>ignore</c>. An exit signal with this <c>Reason</c> (or with reason
diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl
index 6a6194ecd3..f59456d61a 100644
--- a/lib/stdlib/src/gen_server.erl
+++ b/lib/stdlib/src/gen_server.erl
@@ -395,9 +395,10 @@ init_it(Starter, Parent, Name0, Mod, Args, Options) ->
{ok, {ok, State}} ->
proc_lib:init_ack(Starter, {ok, self()}),
loop(Parent, Name, State, Mod, infinity, HibernateAfterTimeout, Debug);
- {ok, {ok, State, Timeout}} ->
+ {ok, {ok, State, TimeoutHibernateOrContinue}} ->
proc_lib:init_ack(Starter, {ok, self()}),
- loop(Parent, Name, State, Mod, Timeout, HibernateAfterTimeout, Debug);
+ loop(Parent, Name, State, Mod, TimeoutHibernateOrContinue,
+ HibernateAfterTimeout, Debug);
{ok, {stop, Reason}} ->
%% For consistency, we must make sure that the
%% registered name (if any) is unregistered before
--
2.26.2