in component-dsl/src/main/java/org/apache/aries/component/dsl/internal/UpdateSupport.java [68:101]
public static <R> R runInUpdate(Supplier<R> supplier) {
isUpdate.set(true);
Deque<Deque<Runnable>> deferredPublishers =
deferredPublishersStack.get();
Deque<Deque<Runnable>> deferredTerminators =
deferredTerminatorsStack.get();
deferredPublishers.addLast(new LinkedList<>());
deferredTerminators.addLast(new LinkedList<>());
try {
return supplier.get();
}
finally {
isUpdate.set(false);
Deque<Runnable> terminators =
deferredTerminatorsStack.get().removeLast();
for (Runnable terminator : terminators) {
terminator.run();
}
Deque<Runnable> publishers =
deferredPublishersStack.get().removeLast();
for (Runnable publisher : publishers) {
publisher.run();
}
isUpdate.set(!deferredTerminators.isEmpty());
}
}