I had the same problem with Cowboy recently, really ought to file an issue to at least fix the docs for that.<div><br></div><div>For my app I wanted to implement a graceful shutdown that stopped accepting new connections but allowed existing requests to finish. The waiting part I implemented by adding a gproc local property to the workers that I wanted to wait for and then monitoring them.</div>
<div><br></div><div>Looks like this:</div><div><a href="https://gist.github.com/2655724">https://gist.github.com/2655724</a><br><br><div class="gmail_quote">On Thu, May 10, 2012 at 2:53 AM, PaweĊ‚ Peregud <span dir="ltr"><<a href="mailto:paulperegud@gmail.com" target="_blank">paulperegud@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p>I was having fun with supervisors yesterday (Cowboy seems to fail to fulfill the promise of not killing request processes after listener removal) and I have an example. I've only investigated the case when supervisor is killed, so YMMV. Example code is attached. You may modify it to check the behavior in your case.</p>

<p>Start supervisor tree with exp_sup_sup:start_link(). Execute test with exp_sup_sup:test() and exp_sup_sup:test_simple().</p><p>In case of dying supervisor the answer is "no, it does not".</p><p>When supervisor dies, your process is killed as via link mechanism, so it may leave some unprocessed messages in inbox. To make sure that every delivered message is served, you need to add process_flag(trap_exit, true). Messages that are sent after the moment when supervisor dies are not processed.</p>

<p>Best regards, <br></p><p>Paul.<br></p><div class="HOEnZb"><div class="h5"><p></p><div class="gmail_quote">On May 9, 2012 11:06 AM, "Andy Richards" <<a href="mailto:andy.richards.iit@googlemail.com" target="_blank">andy.richards.iit@googlemail.com</a>> wrote:<br type="attribution">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I can't seem to see any confirmation in the documentation so was wondering if anyone could confirm if messages are still sent to a supervised gen_svr following a shutdown message?<br>
<br>
If so how do I cleanly shutdown my gen_svr without loosing messages? I read in the supervisor child spec that a shutdown can be set to infinity which i hoped would allow me to process the msg's in my mailbox but if I do this will my module continue to receive messages from other processes? Is my approach flawed and if so what other ways are there to cleanly shutting down my gen_svr without loosing messages?<br>



<br>
Many thanks,<br>
<br>
Andy.<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">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>
</blockquote></div>
</div></div><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></blockquote></div><br></div>