@@ -306,6 +306,14 @@ public <T> Mono<T> withInitialization(String actionName, Function<Initialization
306306 DefaultInitialization previous = this .initializationRef .compareAndExchange (null , newInit );
307307
308308 boolean needsToInitialize = previous == null ;
309+ DefaultInitialization activeInitialization = needsToInitialize ? newInit : previous ;
310+ // Complete the handoff with handleException(): if termination won before
311+ // registration, this check publishes it; if registration won first, the
312+ // exception handler observes the active initialization.
313+ Throwable terminalAfterRegistration = this .terminalFailure .get ();
314+ if (terminalAfterRegistration != null ) {
315+ activeInitialization .terminate (terminalAfterRegistration );
316+ }
309317 logger .debug (needsToInitialize ? "Initialization process started" : "Joining previous initialization" );
310318
311319 Mono <McpSchema .InitializeResult > initializationJob ;
@@ -317,10 +325,10 @@ public <T> Mono<T> withInitialization(String actionName, Function<Initialization
317325 .doInitialize (newInit , this .postInitializationHook , ctx )
318326 .onErrorComplete ()
319327 .then (Mono .never ());
320- initializationJob = Mono .firstWithSignal (newInit .await (), initializationWork );
328+ initializationJob = Mono .firstWithSignal (activeInitialization .await (), initializationWork );
321329 }
322330 else {
323- initializationJob = previous .await ();
331+ initializationJob = activeInitialization .await ();
324332 }
325333
326334 return initializationJob .map (initializeResult -> this .initializationRef .get ())
@@ -376,8 +384,8 @@ private Mono<McpSchema.InitializeResult> doInitialize(DefaultInitialization init
376384 }).flatMap (initializeResult -> {
377385 initialization .cacheResult (initializeResult );
378386 return postInitOperation .apply (initialization ).thenReturn (initializeResult );
379- }). doOnNext ( initialization :: complete ). doOnError ( initialization :: error ) ;
380- });
387+ });
388+ }). doOnNext ( initialization :: complete ). doOnError ( initialization :: error ) ;
381389 }
382390
383391 /**
0 commit comments