@Override public DbFuture<Void> close(CloseMode closeMode) throws DbException { synchronized (lock) { if (null == closeFuture) { final MySqlRequest closeRequest = MySqlRequests.createCloseRequest(this); closeFuture = closeRequest.getFuture(); closeFuture.addListener( new DbListener<Void>() { @Override public void onCompletion(DbFuture<Void> future) { MySqlConnection.this.connectionManager.removeConnection(MySqlConnection.this); } }); if (closeMode == CloseMode.CANCEL_PENDING_OPERATIONS) { forceCloseOnPendingRequests(); } forceQueRequest(closeRequest); return closeFuture; } else { return closeFuture; } } }