+
+ @Override
+ void appendLoaders(final Set<LeafCodecClassLoader> newLoaders) {
+ while (true) {
+ final ImmutableSet<LeafCodecClassLoader> local = dependencies;
+ final List<LeafCodecClassLoader> builder = new ArrayList<>(local.size() + newLoaders.size());
+ builder.addAll(local);
+ builder.addAll(newLoaders);
+ final ImmutableSet<LeafCodecClassLoader> updated = ImmutableSet.copyOf(builder);
+ if (local.equals(updated) || DEPENDENCIES_UPDATER.compareAndSet(this, local, updated)) {
+ // No need for an update or the update was successful
+ return;
+ }
+ }
+ }