public static R runInUpdate()

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