Hey Tim,<div><br></div><div>Sounds good. Thanks for the info.</div><div><br></div><div>- jonathan<br><br><div class="gmail_quote">On Fri, Jun 7, 2013 at 1:57 AM, Tim Watson <span dir="ltr">&lt;<a href="mailto:tim@rabbitmq.com" target="_blank">tim@rabbitmq.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Jonathan,<br>
<br>
Ok, you can safely ignore what I&#39;ve written below. What&#39;s actually going on (thanks to Matthias for pointing it out) is that the ShutdownListener callbacks run in the connection&#39;s thread, so the call to createChannel causes a deadlock since it blocks waiting for a response (whilst the connection&#39;s thread is stuck executing the listener). I&#39;m going to add some notes to the API documentation explaining that, so future users don&#39;t get caught out in the same way.<br>

<br>
The canonical approach to dealing with this is to have the shutdown listener callback signal your own (application) thread, from which you can manage recovery without risking deadlock in this fashion.<br>
<br>
Cheers,<br>
Tim<br>
<div class="HOEnZb"><div class="h5"><br>
On 7 Jun 2013, at 09:38, Tim Watson wrote:<br>
<br>
&gt; Hi Jonathan,<br>
&gt;<br>
&gt; On 6 Jun 2013, at 23:42, Jonathan Halterman wrote:<br>
&gt;&gt; I hit on a scenario where connection.createChannel() may hang forever. The scenario: obtain a channel and attempt to publish to a non-existent exchange. The channel will be shutdown. Attempt to establish a new (replacement) channel via Connection.createChannel(), which hangs forever. A simple version of this scenario:<br>

&gt;&gt;<br>
&gt;<br>
&gt; This should not be happening. Are you absolutely sure you&#39;re using version 3.1.1 of the java client library, since a similar bug (involving accidentally re-used channel ids) was fixed in a previous release: <a href="http://hg.rabbitmq.com/rabbitmq-java-client/rev/ea7d68c2154d" target="_blank">http://hg.rabbitmq.com/rabbitmq-java-client/rev/ea7d68c2154d</a><br>

&gt;<br>
&gt;&gt; From Tracer:<br>
&gt;&gt;<br>
&gt;&gt; 1370554962786: &lt;Tracer-0&gt; ch#1 &lt;- {#method&lt;channel.close&gt;(reply-code=404, reply-text=NOT_FOUND - no exchange &#39;foo&#39; in vhost &#39;/&#39;, class-id=60, method-id=40), null, &quot;&quot;}<br>

&gt;&gt; 1370554962788: &lt;Tracer-0&gt; ch#1 -&gt; {#method&lt;channel.close-ok&gt;(), null, &quot;&quot;}<br>
&gt;&gt; 1370554974891: &lt;Tracer-0&gt; ch#1 -&gt; {#method&lt;channel.open&gt;(out-of-band=), null, &quot;&quot;}<br>
&gt;&gt; 1370554974970: &lt;Tracer-0&gt; ch#1 &lt;- {#method&lt;channel.open-ok&gt;(channel-id=), null, &quot;&quot;}<br>
&gt;&gt;<br>
&gt;<br>
&gt; That last line seems very odd - I would&#39;ve expected to a see a channel id in there, though truth be told I&#39;m not overly familiar with the Tracer tool in the java client.<br>
&gt;<br>
&gt;&gt; Any ideas why things are hanging?<br>
&gt;&gt;<br>
&gt;<br>
&gt; According to the last line of the trace you&#39;ve supplied, a new channel was opened successfully, though there&#39;s no channel id present which is worrying. Please confirm that you are definitely using the right version (i.e., where did you obtain the amqp-client binary from) and we&#39;ll take a closer look.<br>

&gt;<br>
&gt; Cheers,<br>
&gt; Tim<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; rabbitmq-discuss mailing list<br>
&gt; <a href="mailto:rabbitmq-discuss@lists.rabbitmq.com">rabbitmq-discuss@lists.rabbitmq.com</a><br>
&gt; <a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
<br>
_______________________________________________<br>
rabbitmq-discuss mailing list<br>
<a href="mailto:rabbitmq-discuss@lists.rabbitmq.com">rabbitmq-discuss@lists.rabbitmq.com</a><br>
<a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
</div></div></blockquote></div><br></div>