@@ -381,26 +381,32 @@ public CompletableFuture<Void> stop() {
381381
382382 for (CopilotSession session : new ArrayList <>(sessions .values ())) {
383383 Runnable closeTask = () -> {
384- try {
385- session .close ();
386- } catch (Exception e ) {
387- LOG .log (Level .WARNING , "Error closing session " + session .getSessionId (), e );
388- }
384+ session .close ();
389385 };
390386 CompletableFuture <Void > future ;
391387 try {
392388 future = CompletableFuture .runAsync (closeTask , executor );
393389 } catch (RejectedExecutionException e ) {
394390 LOG .log (Level .WARNING , "Executor rejected session close task; closing inline" , e );
395- closeTask .run ();
396- future = CompletableFuture .completedFuture (null );
391+ try {
392+ closeTask .run ();
393+ future = CompletableFuture .completedFuture (null );
394+ } catch (RuntimeException closeError ) {
395+ future = CompletableFuture .failedFuture (closeError );
396+ }
397397 }
398398 closeFutures .add (future );
399399 }
400400 sessions .clear ();
401401
402402 return CompletableFuture .allOf (closeFutures .toArray (new CompletableFuture [0 ]))
403- .thenCompose (v -> cleanupConnection (true ));
403+ .handle ((ignored , closeError ) -> closeError )
404+ .thenCompose (closeError -> cleanupConnection (true ).thenApply (ignored -> {
405+ if (closeError != null ) {
406+ throw new CompletionException (closeError );
407+ }
408+ return null ;
409+ }));
404410 }
405411
406412 /**
@@ -571,6 +577,7 @@ public CompletableFuture<CopilotSession> createSession(SessionConfig config) {
571577 long setupNanos = System .nanoTime ();
572578 var s = new CopilotSession (sid , connection .rpc );
573579 s .setExecutor (executor );
580+ s .setOnClosed (() -> sessions .remove (sid , s ));
574581 SessionRequestBuilder .configureSession (s , config );
575582 if (extracted .transformCallbacks () != null ) {
576583 s .registerTransformCallbacks (extracted .transformCallbacks ());
@@ -743,6 +750,7 @@ public CompletableFuture<CopilotSession> resumeSession(String sessionId, ResumeS
743750 long setupNanos = System .nanoTime ();
744751 var session = new CopilotSession (sessionId , connection .rpc );
745752 session .setExecutor (executor );
753+ session .setOnClosed (() -> sessions .remove (sessionId , session ));
746754 SessionRequestBuilder .configureSession (session , config );
747755 sessions .put (sessionId , session );
748756 LoggingHelpers .logTiming (LOG , Level .FINE ,
0 commit comments