<div class="gmail_quote">2009/1/14 Ben Hood <span dir="ltr"><<a href="mailto:0x6e6562@gmail.com">0x6e6562@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br>
The issue of excessive mailbox scanning during the bottom half of a<br>
gen_server call has been brought up at various stages on this list.<br>
<br>
The issue has become of some concern to us, so we have patched the<br>
gen_server implementation from R11B5 to drain the mailbox in the loop.<br>
<br>
It seems to do the job but I just wanted to get some feedback from<br>
more knowledgable people before this functionality is merged into our<br>
main source tree.<br>
<br>
The patched version is available here:<br>
<br>
<a href="http://hg.rabbitmq.com/rabbitmq-server/file/06b16fb29a1c/src/gen_server2.erl" target="_blank">http://hg.rabbitmq.com/rabbitmq-server/file/06b16fb29a1c/src/gen_server2.erl</a><br>
<br>
Any remarks or help is appreciated,<br>
</blockquote></div><br>From a callback point of view, the changes are probably transparent, but:<br><br>* process_info(Pid, message_queue_len) will probably lie now because the mailbox has been drained into an internal queue. If your message queue is indeed building up in a message storm, diagnosing the problem will become more difficult. <br>
<br>* And if you did a sys:get_status(Pid) on the gen_server, you will copying the entire message queue just to view it... <br><br>* Crash reports will be MUCH bigger.<br><br>cheers<br>Chandru<br><br>