[ https://issues.apache.org/jira/browse/QPID-6484?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14488205#comment-14488205 ]
Chuck Rolke commented on QPID-6484: ----------------------------------- This is a bug in the C++ code handling of proton conditions. Essentially the sender has failed and the description of the failure is being constructed. in ConnectionContext::checkClosed() when link_state REQUIRES_CLOSE {code} pn_condition_t* error = pn_session_remote_condition(ssn->session); std::stringstream text; if (pn_condition_is_set(error)) { text << "Session ended by peer with " << pn_condition_get_name(error) << ": " << pn_condition_get_description(error); } else { text << "Session ended by peer"; } {code} In the failure mode * pn_condition_is_set(error) = true * pn_condition_get_name(error) = amqp:not-found * pn_condition_get_description(error) = NULL and the NULL exception is thrown creating the description text. The failure (on my setup) happens occasionally, maybe 10-20% of the time. Normally, and always when going to a C++ qpidd broker, the link never processes REQUIRES_CLOSE and the top-level program receives a "No such source: service_queue" exception that is handled gracefully. There are a dozen or so instances of unchecked pn_condition_get_description() in the messaging client. I'd prefer to fix this in Proton and have the function return a pointer to a null string instead of NULL. > AccessViolationException when creating queues > --------------------------------------------- > > Key: QPID-6484 > URL: https://issues.apache.org/jira/browse/QPID-6484 > Project: Qpid > Issue Type: Bug > Components: Dot Net Client > Affects Versions: 0.32 > Environment: Windows 8.1 > VS 2013 x86 > .NET wrapped Qpid C++ Client 0.32 with Proton 0.9 > Qpid Java Broker 0.30 > AMQP 1.0 > Reporter: Enrico Popall > Priority: Critical > > If the client creates a queue which does not exist on the broker, the > Session.createSender/Session.createReceiver method throws an > AccessViolationException. > If the queue exist, the creation of the sender/receiver works like a charm. > {code:title=csharp.example.client.cs} > namespace Org.Apache.Qpid.Messaging.Examples { > class Client { > static int Main(string[] args) { > String url = "amqp:tcp:127.0.0.1:5672"; > String connectionOptions = > "{protocol:amqp1.0,sasl_mechanisms:PLAIN,username:guest,password:guest}"; > if (args.Length > 0) > url = args[0]; > if (args.Length > 1) > connectionOptions = args[1]; > Connection connection = new Connection(url, connectionOptions); > try > { > connection.Open(); > Session session = connection.CreateSession(); > Sender sender = session.CreateSender("service_queue; > {create:always}"); > Address responseQueue = new Address("#response-queue; > {create:always}"); > Receiver receiver = session.CreateReceiver(responseQueue); > String[] s = new String[] { > "Twas brillig, and the slithy toves", > "Did gire and gymble in the wabe.", > "All mimsy were the borogroves,", > "And the mome raths outgrabe." > }; > Message request = new Message(""); > request.ReplyTo = responseQueue; > for (int i = 0; i < s.Length; i++) { > request.SetContent(s[i]); > sender.Send(request); > Message response = receiver.Fetch(); > Console.WriteLine("{0} -> {1}", request.GetContent(), > response.GetContent()); > } > connection.Close(); > return 0; > } > catch (Exception e) > { > Console.WriteLine("Exception {0}.", e); > connection.Close(); > } > return 1; > } > } > }{code} > Stacktrace: > bei qpid.messaging.Session.createSender(Session* , Sender* , > basic_string<char\,std::char_traits<char>\,std::allocator<char> >* ) > bei Org.Apache.Qpid.Messaging.Session.CreateSender(String address) in > \qpid-0.32\qpid\cpp\bindings\qpid\dotnet\src\session.cpp:Zeile 474. > bei Org.Apache.Qpid.Messaging.Examples.Client.Main(String[] args) in > \qpid-0.32\qpid\cpp\bindings\qpid\dotnet\examples\csharp.example.client\csharp.example.client.cs:Zeile > 43. > bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] > args) > bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence > assemblySecurity, String[] args) > bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() > bei System.Threading.ThreadHelper.ThreadStart_Context(Object state) > bei System.Threading.ExecutionContext.RunInternal(ExecutionContext > executionContext, ContextCallback callback, Object state, Boolean > preserveSyncCtx) > bei System.Threading.ExecutionContext.Run(ExecutionContext > executionContext, ContextCallback callback, Object state, Boolean > preserveSyncCtx) > bei System.Threading.ExecutionContext.Run(ExecutionContext > executionContext, ContextCallback callback, Object state) > bei System.Threading.ThreadHelper.ThreadStart() -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org