Return-Path: X-Original-To: apmail-activemq-commits-archive@www.apache.org Delivered-To: apmail-activemq-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 94BE54521 for ; Wed, 25 May 2011 18:54:07 +0000 (UTC) Received: (qmail 60246 invoked by uid 500); 25 May 2011 18:54:07 -0000 Delivered-To: apmail-activemq-commits-archive@activemq.apache.org Received: (qmail 60219 invoked by uid 500); 25 May 2011 18:54:07 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 60212 invoked by uid 99); 25 May 2011 18:54:07 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 May 2011 18:54:07 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 May 2011 18:54:04 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 7C88D23888E4; Wed, 25 May 2011 18:53:43 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1127629 - in /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src: main/csharp/MessageConsumer.cs test/csharp/MessageConsumerTest.cs Date: Wed, 25 May 2011 18:53:43 -0000 To: commits@activemq.apache.org From: tabish@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110525185343.7C88D23888E4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: tabish Date: Wed May 25 18:53:43 2011 New Revision: 1127629 URL: http://svn.apache.org/viewvc?rev=1127629&view=rev Log: Fix for: https://issues.apache.org/jira/browse/AMQNET-328 Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/test/csharp/MessageConsumerTest.cs Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs?rev=1127629&r1=1127628&r2=1127629&view=diff ============================================================================== --- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs (original) +++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs Wed May 25 18:53:43 2011 @@ -781,7 +781,11 @@ namespace Apache.NMS.ActiveMQ this.session.TransactionContext.SyncRoot.ReleaseMutex(); this.session.TransactionContext.DtcWaitHandle.WaitOne(); } - } + else + { + this.session.TransactionContext.SyncRoot.ReleaseMutex(); + } + } lock(this.dispatchedMessages) { Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/test/csharp/MessageConsumerTest.cs URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/test/csharp/MessageConsumerTest.cs?rev=1127629&r1=1127628&r2=1127629&view=diff ============================================================================== --- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/test/csharp/MessageConsumerTest.cs (original) +++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/test/csharp/MessageConsumerTest.cs Wed May 25 18:53:43 2011 @@ -38,6 +38,47 @@ namespace Apache.NMS.ActiveMQ.Test protected static string TEST_CLIENT_ID = "MessageConsumerTestClientId"; [Test] + public void ConsumeInTwoThreads() + { + ParameterizedThreadStart threadStart = + delegate(object o) + { + IMessageConsumer consumer = (IMessageConsumer)o; + IMessage message = consumer.Receive(TimeSpan.FromSeconds(2)); + Assert.IsNotNull(message); + }; + + using (IConnection connection = CreateConnection(TEST_CLIENT_ID)) + { + connection.Start(); + using (ISession session = connection.CreateSession(AcknowledgementMode.Transactional)) + { + IQueue queue = SessionUtil.GetDestination(session, DESTINATION_NAME) as IQueue; + + // enqueue 2 messages + using (IMessageConsumer consumer = session.CreateConsumer(queue)) + using (IMessageProducer producer = session.CreateProducer(queue)) + { + producer.DeliveryMode = MsgDeliveryMode.Persistent; + producer.Send(producer.CreateMessage()); + producer.Send(producer.CreateMessage()); + session.Commit(); + + // receive first using a dedicated thread. This works + Thread thread = new Thread(threadStart); + thread.Start(consumer); + thread.Join(); + session.Commit(); + + // receive second using main thread. This FAILS + IMessage message = consumer.Receive(TimeSpan.FromSeconds(2)); // throws System.Threading.AbandonedMutexException + Assert.IsNotNull(message); + session.Commit(); + } + } + } + } + [Test] public void TestReceiveIgnoreExpirationMessage( [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)]