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();