It's very well written. Anyway for one who can't found it in code, answer is: In case when server doesn't exists gen_server:call function exits with {noproc, {gen_server, call, [Name, Request, Timeout]}}.<br><br>
<div class="gmail_quote">On Tue, Jan 13, 2009 at 2:44 PM, Christian <span dir="ltr"><<a href="mailto:chsu79@gmail.com">chsu79@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">> correct me if i am wrong:<br>
><br>
> messages are dropped if the receiving process is dead.<br>
><br>
> with gen_server, if you use synchronized call, you can specify a timeout value<br>
><br>
> gen_server:call(ServerRef, Request, Timeout)<br>
><br>
> "The call may fail for several reasons, including timeout and the<br>
> called gen_server dying before or during the call."<br>
><br>
> I think you get either a badarg (pid doesn't exist (as it's dead)) or<br>
> timeout (if the process died after message had been sent)<br>
<br>
</div>Every time I want to remind myself on how this works i look at the<br>
do_call/4 function in<br>
lib/stdlib/src/gen.erl, it is the one that implement the<br>
gen_server:call currently.<br>
<br>
(Disclaimer, there can of course be undocumented features in the code<br>
that one should not rely on. But it is so much easier to understand<br>
code than english that describes code. :)<br>
<br>
What you learn is that gen_server:call will create a monitor on the<br>
server for the duration of the call. So it will detect immediately if<br>
the server has crashed, or if it crashes while it is waiting on a<br>
reply. Another fun trivia is that the monitor reference is used as a<br>
unique id to identify the correct request/response from the<br>
gen_server.<br>
<br>
Timeouts are really just relevant for gen_servers that are so bogged<br>
down that they cant get around to process your request and reply to it<br>
in time. (Also some code there for if its a node that doesnt support<br>
monitoring of processes). The gen_server will not notice that the<br>
caller have timed out, so it will process the request when it gets to<br>
it, unless it has crashed for other reasons by then.<br>
<div><div></div><div class="Wj3C7c">_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil<br><br>Analyze your data in minutes. Share your insights instantly. Thrill your boss.  Be a data hero!<br>Try Good Data now for free: <a href="http://www.gooddata.com">www.gooddata.com</a><br>