docs: @Override
      protected void onSessionClose(long sessionId, Map<Long, Object> responses) {
          SessionSemaphoreState state = sessionStates.get(sessionId);
          if (state != null) {
              // remove the session after release() because release() checks existence of the session
              if (state.acquiredPermits > 0) {
                  SemaphoreEndpoint endpoint = new SemaphoreEndpoint(sessionId, 0);
                  ReleaseResult result = release(endpoint, newUnsecureUUID(), state.acquiredPermits);
                  assert result.cancelled.isEmpty();
                  for (AcquireInvocationKey key : result.acquired) {
                      responses.put(key.commitIndex(), Boolean.TRUE);
                  }
              }
  
              sessionStates.remove(sessionId);
          }
      }