<div dir="ltr">Thanks, Ben. I&#39;ll apply the patch.<br><br>Incidentally this is the only part of the entire Erlang Rabbit code base that uses queue:head/1 :)<br><br>I&#39;m glad that I was not hallucinating; I was so tired when I looked at that code the screen was getting blurred...<br>
<br>Ironically, I looked suspiciously at the use of cast in the code, but then I thought, why not be able to cast? I thought wrong.<br><br>Edwin<br><br><div class="gmail_quote">On Tue, Sep 23, 2008 at 7:49 AM, Ben Hood <span dir="ltr">&lt;<a href="mailto:0x6e6562@gmail.com">0x6e6562@gmail.com</a>&gt;</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;">Edwin,<br>
<div><div></div><div class="Wj3C7c"><br>
On Tue, Sep 23, 2008 at 5:49 AM, Edwin Fine<br>
&lt;<a href="mailto:rabbitmq-discuss_efine@usa.net">rabbitmq-discuss_efine@usa.net</a>&gt; wrote:<br>
&gt; I believe this is coming from the Erlang client, in<br>
&gt; amqp_channel:rpc_bottom_half/2. I can&#39;t tell you why your program is doing<br>
&gt; this, only where the error message originates. It seems to be happening in<br>
&gt; response to receiving a tx.select_ok, AFAICS.<br>
&gt;<br>
&gt; If you look at the code for rpc_bottom_half (reproduced at the end of this<br>
&gt; email for convenience), the line<br>
&gt;<br>
&gt; {{value, {From,_}}, NewRequestQueue} = queue:out(RequestQueue)<br>
&gt;<br>
&gt; will create the error message you are seeing if RequestQueue is empty. This<br>
&gt; can clearly be seen in the shell:<br>
&gt;<br>
&gt; 1&gt; EmptyQ = queue:new().<br>
&gt; {[],[]}<br>
&gt; 2&gt; {{value, {From,_}}, NewRequestQueue} = queue:out(EmptyQ).<br>
&gt; ** exception error: no match of right hand side value {empty,{[],[]}}<br>
&gt;<br>
&gt; I don&#39;t know if this is a bug or one of those &quot;can&#39;t happen&quot; things that<br>
&gt; just didn&#39;t give a nice error message. I suspect the latter, because the<br>
&gt; code just cannot continue without the value of &quot;From&quot; to send a reply to.<br>
&gt; Why should the function have been called with a reply if the reply queue is<br>
&gt; empty? Something&#39;s wrong somewhere.<br>
&gt;<br>
&gt; In addition, maybe I am too tired to see straight, but this looks really<br>
&gt; suspect:<br>
&gt;<br>
&gt; &nbsp; &nbsp; catch case queue:head(NewRequestQueue) of<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; empty -&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ok;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; {NewFrom,Method} -&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Do2(Writer,Method)<br>
&gt; &nbsp; &nbsp; end,<br>
&gt;<br>
&gt; This is because queue:head/1 exits when it is empty and does not return<br>
&gt; &#39;empty&#39;, so the catch will return an EXIT:<br>
&gt;<br>
&gt; 1&gt; catch queue:head(queue:new()).<br>
&gt; {&#39;EXIT&#39;,{empty,[{queue,head,[{[],[]}]},<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {erl_eval,do_apply,5},<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {erl_eval,expr,5},<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {shell,exprs,6},<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {shell,eval_exprs,6},<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {shell,eval_loop,3}]}}<br>
&gt;<br>
&gt; I think this should be<br>
&gt;<br>
&gt; &nbsp; &nbsp; catch case queue:head(NewRequestQueue) of<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; {&#39;EXIT&#39;, {empty,_}} -&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ok;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; {NewFrom,Method} -&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Do2(Writer,Method)<br>
&gt; &nbsp; &nbsp; end,<br>
&gt;<br>
<br>
</div></div>Thanks for pointing this one out - it was a branch of the code that<br>
had never been visited by any tests before :-(<br>
<br>
I&#39;ve applied this patch to the client - see<br>
<a href="http://hg.rabbitmq.com/rabbitmq-erlang-client/rev/ef7db7bfc51a" target="_blank">http://hg.rabbitmq.com/rabbitmq-erlang-client/rev/ef7db7bfc51a</a><br>
<br>
Currently it is only on that branch - this will be merged back into<br>
the mainline when the peer QA is done.<br>
<br>
Note that this is not the solution for the TX issue - that will be<br>
addressed separately.<br>
<font color="#888888"><br>
Ben<br>
<br>
</font></blockquote></div><br></div>