You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2017/10/10 15:50:41 UTC
svn commit: r1811719 -
/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java
Author: csierra
Date: Tue Oct 10 15:50:41 2017
New Revision: 1811719
URL: http://svn.apache.org/viewvc?rev=1811719&view=rev
Log:
[Component-DSL] Add closed status to the tuple
Modified:
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java
Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java
URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java?rev=1811719&r1=1811718&r2=1811719&view=diff
==============================================================================
--- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java (original)
+++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/Tuple.java Tue Oct 10 15:50:41 2017
@@ -35,6 +35,7 @@ class Tuple<T> implements Event<T> {
private Deque<Runnable> _closingHandlers = new LinkedList<>();
private DoublyLinkedList<Tuple<?>> _relatedTuples =
new DoublyLinkedList<>();
+ private AtomicBoolean closed = new AtomicBoolean(false);
private Tuple(T t) {
this(t, new LinkedList<>());
@@ -45,13 +46,15 @@ class Tuple<T> implements Event<T> {
_closingHandlers = closingHandlers;
}
- public DoublyLinkedList.Node<Tuple<?>> addRelatedTuple(Tuple<?> tuple) {
+ public void addRelatedTuple(Tuple<?> tuple) {
+ if (closed.get()) {
+ return;
+ }
+
DoublyLinkedList.Node<Tuple<?>> tupleNode = _relatedTuples.addLast(
tuple);
tuple.onTermination(tupleNode::remove);
-
- return tupleNode;
}
public static <T> Tuple<T> create(T t) {
@@ -70,12 +73,11 @@ class Tuple<T> implements Event<T> {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- Tuple<?> tuple = (Tuple<?>) o;
+ return this == o;
+ }
- return t.equals(tuple.t);
+ public boolean isClosed() {
+ return closed.get();
}
public <S> Tuple<S> map(Function<? super T, ? extends S> fun) {
@@ -83,10 +85,18 @@ class Tuple<T> implements Event<T> {
}
public void onTermination(Runnable terminator) {
+ if (closed.get()) {
+ return;
+ }
+
_closingHandlers.push(terminator);
}
public void terminate() {
+ if (!closed.compareAndSet(false, true)) {
+ return;
+ }
+
Iterator<Tuple<?>> iterator = _relatedTuples.iterator();
while (iterator.hasNext()) {