--- messaging: the defect was closed and pinned by a contract test 22: *
{@code resolve} was get → fetch → put → clear with no synchronization. Two callers rotating 23- * the same credential both read the same old runtime and both fetched a replacement: one 24- * replacement was dropped from the map without ever being cleared — a secret left in memory that 25- * nothing owns — and the loser could clear material the winner was still using. 26- */ --- grpc: AtomicReference used as a plain holder 70: return state.get().current(); 75: return Optional.ofNullable(state.get().draining()); 89: State observed = state.get(); 103: state.set(new State(next, observed.current(), deadline)); 113: State observed = state.get(); 119: State observed = state.get(); 120: state.set(new State(observed.current(), null, null)); --- compareAndSet / updateAndGet / synchronized in that file: 0 --- and the javadoc already names the race: 83: * usual reason for one is two rotators racing