[rhmessaging-commits] rhmessaging commits: r2862 - store/branches/java/broker-queue-refactor/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Fri Nov 21 11:22:37 EST 2008


Author: aidanskinner
Date: 2008-11-21 11:22:37 -0500 (Fri, 21 Nov 2008)
New Revision: 2862

Modified:
   store/branches/java/broker-queue-refactor/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java
Log:
RHM-7: Make sure that important state variable manipulation happens while holding the _lock in CommitThread. Make sure all waits time out after a while and recheck their state, rather than potentially locking up.

Modified: store/branches/java/broker-queue-refactor/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java
===================================================================
--- store/branches/java/broker-queue-refactor/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java	2008-11-21 16:06:42 UTC (rev 2861)
+++ store/branches/java/broker-queue-refactor/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStore.java	2008-11-21 16:22:37 UTC (rev 2862)
@@ -1800,7 +1800,7 @@
                 {
                     try
                     {
-                        wait();
+                        wait(250);
                     }
                     catch (InterruptedException e)
                     {
@@ -1847,22 +1847,23 @@
         {
             while (!_stopped.get())
             {
-                try
+                synchronized (_lock)
                 {
-                    synchronized (_lock)
+                    while (!_stopped.get() && !hasJobs())
                     {
-                        while (!_stopped.get() && !hasJobs())
+                        try
                         {
-                            _lock.wait();
+                            // RHM-7 Periodically wake up and check, just in case we 
+                            // missed a notification. Don't want to lock the broker hard.
+                            _lock.wait(250);
                         }
+                        catch (InterruptedException e)
+                        {
+                            // _log.info(getName() + " interrupted. ");
+                        }
                     }
-                    processJobs();
-
                 }
-                catch (InterruptedException e)
-                {
-                    // _log.info(getName() + " interrupted. ");
-                }
+                processJobs();
             }
         }
 
@@ -1901,18 +1902,18 @@
 
         public void addJob(Commit commit)
         {
-            _jobQueue.get().add(commit);
             synchronized (_lock)
             {
+                _jobQueue.get().add(commit);
                 _lock.notifyAll();
             }
         }
 
         public void close()
         {
-            _stopped.set(true);
             synchronized (_lock)
             {
+                _stopped.set(true);
                 _lock.notifyAll();
             }
         }




More information about the rhmessaging-commits mailing list