dir_debug("User %u move finished at state=%s", user->username_hash,
user_kill_state_names[kill_ctx->kill_state]);
+ if (kill_ctx->ipc_cmd != NULL)
+ ipc_client_cmd_abort(dir->ipc_proxy, &kill_ctx->ipc_cmd);
timeout_remove(&kill_ctx->to_move);
i_free(kill_ctx->socket_path);
i_free(kill_ctx);
struct director_kill_context *ctx = context;
struct user *user;
+ /* don't try to abort the IPC command anymore */
+ ctx->ipc_cmd = NULL;
+
/* this is an asynchronous notification about user being killed.
there are no guarantees about what might have happened to the user
in the mean time. */
user->username_hash);
ctx->callback_pending = TRUE;
dir->users_kicking_count++;
- ipc_client_cmd(dir->ipc_proxy, cmd,
- director_kill_user_callback, ctx);
+ ctx->ipc_cmd = ipc_client_cmd(dir->ipc_proxy, cmd,
+ director_kill_user_callback, ctx);
} else {
/* a) we didn't even know about the user before now.
don't bother performing a local kick, since it wouldn't
/* Move timeout to make sure user's connections won't silently hang
indefinitely if there is some trouble moving it. */
struct timeout *to_move;
+ /* IPC command to kick the user */
+ struct ipc_client_cmd *ipc_cmd;
/* these are set only for director_flush_socket handling: */
struct ip_addr host_ip;