<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 24, 2016 at 4:49 PM, Caiyun Deng <span dir="ltr"><<a href="mailto:dcy.dengcaiyun@gmail.com" target="_blank">dcy.dengcaiyun@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">What happens if two gen_server call each other at the exact same time?<br><div><br></div></div></blockquote><div><br></div><div>It depends on what the timeout values of the gen_server calls are set to. But with 5000ms, A will be waiting on B to process, and B will be waiting on A to process. Both servers will crash when the timeout is hit, unless one of A or B manages to process and return an answer before.</div><div><br></div><div>In short: deadlock.</div><div><br></div><div>One way to break these situations is to process messages asynchronously through casts, or to "order" your gen_servers such that the call direction does not allow for loops in callers. Your example is the simplest cycle possible, but you can easily hit the same problem for long call-chains ending in a loop. </div></div><div><br></div>-- <br><div class="gmail_signature">J.</div>
</div></div>