[erlang-bugs] gen_server documentation error

Adam Lindberg <>
Tue Jun 28 11:07:07 CEST 2011


There might be code which relies on the current behavior (such as 
cleaning up state in terminate, and expecting that that state is cleaned 
up after the call returns).

Cheers,
Adam



Erik Søe Sørensen wrote:
> I think it would appeal more to intuition if the code is fixed rather
> than the documentation... i.e. swap the two actions.
> That would keep all replies before the terminate action.
>
> Adam Lindberg wrote:
>> Hi,
>>
>> In the documentation for Module:handle_call/3 in the gen_server
>> module, it states:
>>
>>> If the function returns {stop,Reason,Reply,NewState}, Reply will be
>>> given back to From. If the function returns {stop,Reason,NewState},
>>> any reply to From must be given explicitly using gen_server:reply/2.
>>> The gen_server will then call Module:terminate(Reason,NewState) and
>>> terminate.
>>
>> This is false.
>>
>> The true behavior exists on line 573:
>>
>> {stop, Reason, Reply, NState} ->
>> {'EXIT', R} =
>> (catch terminate(Reason, Name, Msg, Mod, NState, [])),
>> reply(From, Reply),
>> exit(R);
>>
>> The documentation should probably read:
>>
>> If the function returns {stop,Reason,Reply,NewState}, the gen_server
>> will call Module:terminate(Reason,NewState) and Reply will be given
>> back to From after the call to Module:terminate/2 has completed. If
>> the function returns {stop,Reason,NewState}, any reply to From must be
>> given explicitly using gen_server:reply/2.
>>
>> Cheers,
>> Adam
>
> _______________________________________________
> erlang-bugs mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-bugs


More information about the erlang-bugs mailing list