[jboss-cvs] JBoss Messaging SVN: r7698 - in trunk: src/main/org/jboss/messaging/core/client/impl and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 10 08:41:59 EDT 2009


Author: timfox
Date: 2009-08-10 08:41:58 -0400 (Mon, 10 Aug 2009)
New Revision: 7698

Modified:
   trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java
   trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java
   trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
   trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java
   trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java
Log:
reworked deadlock fix

Modified: trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java	2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java	2009-08-10 12:41:58 UTC (rev 7698)
@@ -173,6 +173,4 @@
    void setDiscoveryRefreshTimeout(long discoveryRefreshTimeout);
 
    void close();
-   
-   Executor getThreadPool();
 }

Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java	2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java	2009-08-10 12:41:58 UTC (rev 7698)
@@ -848,11 +848,6 @@
 
       closed = true;
    }
-   
-   public Executor getThreadPool()
-   {
-      return threadPool;
-   }
 
    // DiscoveryListener implementation --------------------------------------------------------
 

Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java	2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java	2009-08-10 12:41:58 UTC (rev 7698)
@@ -23,7 +23,6 @@
 
 import static org.jboss.messaging.utils.SimpleString.toSimpleString;
 
-import java.io.File;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -1276,7 +1275,10 @@
          channel.close();
       }
 
-      connectionManager.removeSession(this);
+      if (!channel.getConnection().isDestroyed())
+      {
+         connectionManager.removeSession(this);
+      }
    }
 
    private void cleanUpChildren() throws Exception

Modified: trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java	2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java	2009-08-10 12:41:58 UTC (rev 7698)
@@ -123,8 +123,6 @@
    private final int transactionBatchSize;
 
    private ClientSession initialSession;
-   
-   private final Executor executor;
 
    // Constructors ---------------------------------------------------------------------------------
 
@@ -145,8 +143,6 @@
       this.clientID = clientID;
 
       this.sessionFactory = sessionFactory;
-      
-      this.executor = new OrderedExecutorFactory(sessionFactory.getThreadPool()).getExecutor();
 
       uid = UUIDGenerator.getInstance().generateSimpleStringUUID();
 
@@ -400,7 +396,7 @@
    {
       tempQueues.remove(queueAddress);
    }
-   
+
    public boolean containsTemporaryQueue(final SimpleString queueAddress)
    {
       return tempQueues.contains(queueAddress);
@@ -425,7 +421,7 @@
    {
       sessions.remove(session);
    }
-   
+
    public ClientSession getInitialSession()
    {
       return initialSession;
@@ -441,8 +437,7 @@
    {
       if (!closed)
       {
-         log.warn("I'm closing a connection you left open. Please make sure you close all connections explicitly " +
-                  "before letting them go out of scope!");
+         log.warn("I'm closing a connection you left open. Please make sure you close all connections explicitly " + "before letting them go out of scope!");
          close();
       }
    }
@@ -523,8 +518,8 @@
    {
       try
       {
-         initialSession = sessionFactory.createSession(username, password, false, false, false, false, 0); 
-         
+         initialSession = sessionFactory.createSession(username, password, false, false, false, false, 0);
+
          initialSession.addFailureListener(listener);
       }
       catch (MessagingException me)
@@ -537,16 +532,16 @@
 
    private class JMSFailureListener implements FailureListener
    {
-      //Make sure it's only called once
+      // Make sure it's only called once
       private boolean failed;
-      
+
       public synchronized boolean connectionFailed(final MessagingException me)
       {
          if (failed)
          {
             return true;
          }
-         
+
          if (me == null)
          {
             return true;
@@ -557,19 +552,16 @@
             final JMSException je = new JMSException(me.toString());
 
             je.initCause(me);
-            
-//            executor.execute(new Runnable()
-//            {
-//               public void run()
-//               {
-//                  synchronized (exceptionListener)
-//                  {
-                     exceptionListener.onException(je);
-//                  }
-//               }
-//            });           
+
+            new Thread(new Runnable()
+            {
+               public void run()
+               {
+                  exceptionListener.onException(je);
+               }
+            }).start();
          }
-         
+
          failed = true;
 
          return true;

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java	2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java	2009-08-10 12:41:58 UTC (rev 7698)
@@ -98,98 +98,95 @@
 
       super.tearDown();
    }
-   
-   public void testFoo()
-   {}
-   
+    
 
    // https://jira.jboss.org/jira/browse/JBMESSAGING-1702
    //Test that two failures concurrently executing and calling the same exception listener
    //don't deadlock
-//   public void testDeadlock() throws Exception
-//   {
-//      for (int i = 0; i < 100; i++)
-//      {
-//         final Connection conn1 = cf1.createConnection();
-//
-//         Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//         RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();
-//
-//         final Connection conn2 = cf2.createConnection();
-//
-//         Session sess2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//         RemotingConnection rc2 = ((ClientSessionImpl)((JBossSession)sess2).getCoreSession()).getConnection();
-//
-//         ExceptionListener listener1 = new ExceptionListener()
-//         {
-//            public void onException(JMSException exception)
-//            {
-//               try
-//               {
-//                  conn2.close();
-//               }
-//               catch (Exception e)
-//               {
-//                  log.error("Failed to close connection2", e);
-//               }
-//            }
-//         };
-//
-//         conn1.setExceptionListener(listener1);
-//
-//         conn2.setExceptionListener(listener1);
-//
-//         Failer f1 = new Failer(rc1);
-//
-//         Failer f2 = new Failer(rc2);
-//
-//         f1.start();
-//
-//         f2.start();
-//
-//         f1.join();
-//
-//         f2.join();  
-//         
-//         conn1.close();
-//         
-//         conn2.close();
-//      }      
-//   }
-//   
-//   private class Failer extends Thread
-//   {
-//      RemotingConnection conn;
-//
-//      Failer(RemotingConnection conn)
-//      {
-//         this.conn = conn;
-//      }
-//
-//      public void run()
-//      {
-//         conn.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
-//      }
-//   }
-//
-//      
-//   //https://jira.jboss.org/jira/browse/JBMESSAGING-1703
-//   //Make sure that failing a connection removes it from the connection manager and can't be returned in a subsequent call
-//   public void testUsingDeadConnection() throws Exception
-//   {
-//      for (int i = 0; i < 100; i++)
-//      {
-//         final Connection conn1 = cf1.createConnection();
-//   
-//         Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//         RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();      
-//   
-//         rc1.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
-//   
-//         Session sess2 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//   
-//         conn1.close();
-//      }
-//   }
+   public void testDeadlock() throws Exception
+   {
+      for (int i = 0; i < 100; i++)
+      {
+         final Connection conn1 = cf1.createConnection();
 
+         Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();
+
+         final Connection conn2 = cf2.createConnection();
+
+         Session sess2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         RemotingConnection rc2 = ((ClientSessionImpl)((JBossSession)sess2).getCoreSession()).getConnection();
+
+         ExceptionListener listener1 = new ExceptionListener()
+         {
+            public void onException(JMSException exception)
+            {
+               try
+               {
+                  conn2.close();
+               }
+               catch (Exception e)
+               {
+                  log.error("Failed to close connection2", e);
+               }
+            }
+         };
+
+         conn1.setExceptionListener(listener1);
+
+         conn2.setExceptionListener(listener1);
+
+         Failer f1 = new Failer(rc1);
+
+         Failer f2 = new Failer(rc2);
+
+         f1.start();
+
+         f2.start();
+
+         f1.join();
+
+         f2.join();  
+         
+         conn1.close();
+         
+         conn2.close();
+      }      
+   }
+   
+   private class Failer extends Thread
+   {
+      RemotingConnection conn;
+
+      Failer(RemotingConnection conn)
+      {
+         this.conn = conn;
+      }
+
+      public void run()
+      {
+         conn.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
+      }
+   }
+
+      
+   //https://jira.jboss.org/jira/browse/JBMESSAGING-1703
+   //Make sure that failing a connection removes it from the connection manager and can't be returned in a subsequent call
+   public void testUsingDeadConnection() throws Exception
+   {
+      for (int i = 0; i < 100; i++)
+      {
+         final Connection conn1 = cf1.createConnection();
+   
+         Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();      
+   
+         rc1.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
+   
+         Session sess2 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+   
+         conn1.close();
+      }
+   }
+
 }




More information about the jboss-cvs-commits mailing list