NodeImpl replace()

in component-dsl/src/main/java/org/apache/aries/component/dsl/internal/ConcurrentDoublyLinkedList.java [953:966]


    NodeImpl<E> replace(E newElement) {
        for (;;) {
            NodeImpl<E> b = getPrev();
            NodeImpl<E> f = getNext();
            if (b == null || f == null || f.isMarker())
                return null;
            NodeImpl<E> x = new NodeImpl<E>(newElement, f, b);
            if (casNext(f, new NodeImpl<>(x))) {
                b.successor(); // to relink b
                x.successor(); // to relink f
                return x;
            }
        }
    }