I see what you mean now, I should have read the document you linked properly before posting ;-)<br><br>It seems either gen_server or supervisor makes a decision on whether or not to execute terminate/1 based on trap_exit being set. It's not immediately obvious to me why that should be.<br>
<br>Time for a browse through the source...<br><br><br><br><div class="gmail_quote">On Tue, Mar 20, 2012 at 4:44 PM, Dawid Figiel <span dir="ltr"><<a href="mailto:dawid.figiel@gmail.com">dawid.figiel@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Heh..<br>
<br>
I read it view times, then I call someone to read this for me... then<br>
that someone becomes confused too ;)<br>
<br>
(1) We jump to terminate/1 when supervisor wants to shut down the gen_server.<br>
(2) Trap_exit lets you handle 'EXIT' signals from linked processes.<br>
<br>
What is the relation between (1) and (2).<br>
In my opinion function terminate has nothing to do with trap_exit.<br>
<br>
Regards,<br>
<br>
Dawid<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On 3/20/12, tom kelly <<a href="mailto:ttom.kelly@gmail.com">ttom.kelly@gmail.com</a>> wrote:<br>
> Hi Dawid,<br>
><br>
> You may have mis-read the documentation slightly, or else I misunderstand<br>
> your question.<br>
><br>
> If trap_exit is set to true then the terminate function is called when the<br>
> gen_server is shutting down, if it is false then the terminate function is<br>
> never called. All cleanup should be done in terminate, nowhere else.<br>
><br>
> Is this what you're asking?<br>
><br>
> //TTom.<br>
><br>
><br>
><br>
> On Tue, Mar 20, 2012 at 4:17 PM, Dawid Figiel <<a href="mailto:dawid.figiel@gmail.com">dawid.figiel@gmail.com</a>>wrote:<br>
><br>
>> Hi,<br>
>><br>
>> There is a recommendation in Erlang doc, which is telling to set up<br>
>> the trap_exit to true in the gen_server:init, when want to do clean up<br>
>> before supervisor will terminate the gen_server.<br>
>><br>
>><br>
>> <a href="http://www.erlang.org/doc/design_principles/gen_server_concepts.html#id66567" target="_blank">http://www.erlang.org/doc/design_principles/gen_server_concepts.html#id66567</a><br>
>><br>
>> My question is:<br>
>> What for trap_exit has to be set to true when the clean up is needed?<br>
>><br>
>> The place for doing some clean ups is under terminate function.<br>
>> We want to have trape_exit set to true when we need to handle 'EXIT'<br>
>> signals coming from linked processes to (for example) not crash<br>
>> gen_server.<br>
>><br>
>> The only explanation for me is that the supervisor may crash too and<br>
>> send 'Exit' to gen_server as well... but this doesn't convince even<br>
>> myself.<br>
>><br>
>> Has anyone some explanation for this advice ?<br>
>><br>
>><br>
>> Best,<br>
>><br>
>> Dawid<br>
>> _______________________________________________<br>
>> erlang-questions mailing list<br>
>> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
>> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
>><br>
><br>
</div></div></blockquote></div><br>