mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-15 12:19:54 +01:00
Merge branch '556-thread-safety-blocking-issues' into 'master'
Forum controller thread safety and tree safety This branch solves the concurrent forum issues by code restructure and refactoring. Closes #556 Closes #552 See merge request !262
This commit is contained in:
@@ -26,13 +26,13 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
|
||||
};
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
public synchronized void clear() {
|
||||
roots.clear();
|
||||
nodeMap.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(Collection<T> nodes) {
|
||||
public synchronized void add(Collection<T> nodes) {
|
||||
// add all nodes to the node map
|
||||
for (T node : nodes) {
|
||||
nodeMap.put(node.getId(), new ArrayList<T>());
|
||||
@@ -45,7 +45,7 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(T node) {
|
||||
public synchronized void add(T node) {
|
||||
add(Collections.singletonList(node));
|
||||
}
|
||||
|
||||
@@ -77,15 +77,18 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
|
||||
}
|
||||
|
||||
|
||||
private void traverse(List<T> list, T node) {
|
||||
private void traverse(List<T> list, T node, int level) {
|
||||
list.add(node);
|
||||
for (T child : nodeMap.get(node.getId())) {
|
||||
traverse(list, child);
|
||||
List<T> children = nodeMap.get(node.getId());
|
||||
node.setLevel(level);
|
||||
node.setDescendantCount(children.size());
|
||||
for (T child : children) {
|
||||
traverse(list, child, level+1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setComparator(Comparator<T> comparator) {
|
||||
public synchronized void setComparator(Comparator<T> comparator) {
|
||||
this.comparator = comparator;
|
||||
// Sort all lists with the new comparator
|
||||
Collections.sort(roots, comparator);
|
||||
@@ -95,10 +98,10 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<T> depthFirstOrder() {
|
||||
public synchronized Collection<T> depthFirstOrder() {
|
||||
List<T> orderedList = new ArrayList<T>();
|
||||
for (T root : roots) {
|
||||
traverse(orderedList, root);
|
||||
traverse(orderedList, root, 0);
|
||||
}
|
||||
return Collections.unmodifiableList(orderedList);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user