@Test public void shutdownLaterDefers() { TcpResources oldTcpResources = TcpResources.tcpResources.getAndSet(tcpResources); TcpResources newTcpResources = TcpResources.tcpResources.get(); try { assertThat(newTcpResources).isSameAs(tcpResources); TcpResources.disposeLoopsAndConnectionsLater(); assertThat(newTcpResources.isDisposed()).isFalse(); TcpResources.disposeLoopsAndConnectionsLater().block(); assertThat(newTcpResources.isDisposed()).as("disposeLoopsAndConnectionsLater completion").isTrue(); assertThat(TcpResources.tcpResources.get()).isNull(); } finally { if (oldTcpResources != null && !TcpResources.tcpResources.compareAndSet(null, oldTcpResources)) { oldTcpResources.dispose(); } } }