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:51:39 UTC

svn commit: r1811725 - in /aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal: OSGiImpl.java Tuple.java

Author: csierra
Date: Tue Oct 10 15:51:38 2017
New Revision: 1811725

URL: http://svn.apache.org/viewvc?rev=1811725&view=rev
Log:
[Component-DSL] Tuple refactoring

To eliminate unnecesary state mutation.

Modified:
    aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java
    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/OSGiImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java?rev=1811725&r1=1811724&r2=1811725&view=diff
==============================================================================
--- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java (original)
+++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java Tue Oct 10 15:51:38 2017
@@ -84,7 +84,16 @@ public class OSGiImpl<T> implements OSGi
 	@Override
 	public OSGiResult run(BundleContext bundleContext, Consumer<T> andThen) {
 		OSGiResultImpl osgiResult =
-			_operation.run(bundleContext, t -> andThen.accept(t._t));
+			_operation.run(
+				bundleContext,
+				t -> {
+					if (!t.isClosed()) {
+						andThen.accept(t._t);
+					}
+					if (t.isClosed()) {
+						t.terminate();
+					}
+				});
 
 		osgiResult.start();
 

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=1811725&r1=1811724&r2=1811725&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:51:38 2017
@@ -33,39 +33,21 @@ import java.util.function.Function;
 class Tuple<T> implements Event<T>, SentEvent<T> {
 
 	public final T _t;
-	private final Deque<Runnable> _closingHandlers;
-	private final DoublyLinkedList<Tuple<?>> _relatedTuples;
-	private final AtomicBoolean closed = new AtomicBoolean(false);
+	private final Deque<Runnable> _closingHandlers = new LinkedList<>();
+	private final DoublyLinkedList<Tuple<?>> _relatedTuples = new DoublyLinkedList<>();
+	private volatile boolean closed = false;
 	private Tuple<T> _cause = this;
 
 	private Tuple(T t) {
-		this(t, new LinkedList<>(), new DoublyLinkedList<>());
-	}
-
-	private Tuple(
-		T t, Deque<Runnable> closingHandlers,
-		DoublyLinkedList<Tuple<?>> relatedTuples) {
-
 		_t = t;
-		_closingHandlers = closingHandlers;
-		_relatedTuples = relatedTuples;
 	}
 
-	private Tuple(
-		T t, Deque<Runnable> closingHandlers,
-		DoublyLinkedList<Tuple<?>> relatedTuples,
-		Tuple<T> cause) {
-
-		this(t, closingHandlers, relatedTuples);
-
+	private Tuple(T t, Tuple<T> cause) {
+		this(t);
 		_cause = cause;
 	}
 
 	public void addRelatedTuple(Tuple<?> tuple) {
-		if (closed.get()) {
-			return;
-		}
-
 		DoublyLinkedList.Node<Tuple<?>> tupleNode = _relatedTuples.addLast(
 			tuple);
 
@@ -92,18 +74,18 @@ class Tuple<T> implements Event<T>, Sent
 	}
 
 	public boolean isClosed() {
-		return closed.get();
+		return closed;
 	}
 
 	public <S> Tuple<S> map(Function<? super T, ? extends S> fun) {
-		return new Tuple<>(fun.apply(_t), _closingHandlers, _relatedTuples);
+		Tuple<S> tuple = new Tuple<>(fun.apply(_t));
+
+		addRelatedTuple(tuple);
+
+		return tuple;
 	}
 
 	public void onTermination(Runnable terminator) {
-		if (closed.get()) {
-			return;
-		}
-
 		_closingHandlers.push(terminator);
 	}
 
@@ -113,8 +95,7 @@ class Tuple<T> implements Event<T>, Sent
 	}
 
 	public Tuple<T> copy() {
-		Tuple<T> copy = new Tuple<>(
-			_t, new LinkedList<>(), new DoublyLinkedList<>(), this);
+		Tuple<T> copy = new Tuple<>(_t, this);
 
 		addRelatedTuple(copy);
 
@@ -122,9 +103,7 @@ class Tuple<T> implements Event<T>, Sent
 	}
 
 	public void terminate() {
-		if (!closed.compareAndSet(false, true)) {
-			return;
-		}
+		closed = true;
 
 		Iterator<Tuple<?>> iterator = _relatedTuples.iterator();