[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