On 24.10.13 9:06 , [email protected] wrote:
Author: jukka
Date: Thu Oct 24 19:06:33 2013
New Revision: 1535500
URL: http://svn.apache.org/r1535500
Log:
OAK-1113: Immediate delivery of events from local commits
Use the LinkedBlockingQueue from a separate listener thread to avoid the fixed
scheduling of events
@@ -186,9 +185,11 @@ public class ChangeDispatcher {
}
}
- private void add(ChangeSet changeSet) {
- for (Listener l : getListeners()) {
- l.add(changeSet);
+ private void add(NodeState root, CommitInfo info) {
+ synchronized (listeners) {
+ for (Listener l : getListeners()) {
+ l.add(root, info);
+ }
}
}
I don't think we need the sync. here. add() is not called concurrently
and getListeners() returns a copy of the registered listeners.
- private void add(ChangeSet changeSet) {
- changeSets.add(changeSet);
+ private synchronized void add(NodeState root, CommitInfo info) {
+ if (blocked) {
+ info = null;
+ }
+ if (changeSets.offer(new ChangeSet(previousRoot, root, info))) {
+ previousRoot = root;
+ blocked = false;
+ } else {
+ blocked = true;
+ }
}
}
Also here add is not called concurrently, so no need to sync.
Michael