<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>Adding rabbitmq-discuss back.</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>From: </b></span><span style="font-family:'Helvetica'; font-size:medium;">Burtsev Aleksey <<a href="mailto:brokenpipe.coder@gmail.com">brokenpipe.coder@gmail.com</a>><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><b>To: </b>Michael Klishin <<a href="mailto:mklishin@gopivotal.com">mklishin@gopivotal.com</a>></div><br><div dir="ltr"><div>Yes. It's not exactly a bug in your .NET client, but it's very weak spot in you code. It is very easy to stumble on this problem. I had to wrap all calls to IModel in if blocks checking CloseReason.<br></div></div></blockquote><div><br></div><div>It sounds like a bug to me ;)</div><br><blockquote type="cite"><div dir="ltr"><div>At least you should set closeReason for IModel and inner ISession when IModel.Close() is called. Even better would be to add IsClosing prop to Imodel and check it before sending commands to ISession, this will not break you existing session shutdown command sequence.<br><br></div></div><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 31, 2013 at 9:58 PM, Michael Klishin <span dir="ltr"><<a href="mailto:mklishin@gopivotal.com" target="_blank">mklishin@gopivotal.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "> Burtsev Aleksey:<br>
<br>
> The code inside ModelBase.BasicGet doesn't Enqueue BasicGetRpcContinuation because m_closeReason is not null<br>
> but send this command to server using _Private_BasicGet(), this method checks ModelBase.m_sessions.m_closeReason which is not null, and then when server reply is received command handler for BasicGetEmpty tries to dequeue (calls Next()) item from m_continuationQueue in which BasicGetRpcContinuation wasn't put.<br>
<br>
So in order to reproduce the problem one has to use basic.get on a closed channel?<br>
--<br>
MK<br></blockquote></div></div>
</blockquote></div><br><div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>--</div><div>MK</div></div>
</div>
<br></body></html>