SilcClientCommandReplyCallback cb;
int i;
+ /* If command is running, finish it. Destructor will free the context. */
+ if (silc_fsm_is_started(&cmd->thread)) {
+ silc_fsm_finish(&cmd->thread);
+ return;
+ }
+
for (i = 0; i < cmd->argc; i++)
silc_free(cmd->argv[i]);
silc_free(cmd->argv);
0, NULL, conn->callback_context);
/* Signal to close connection */
- conn->internal->disconnected = TRUE;
- SILC_FSM_SEMA_POST(&conn->internal->wait_event);
+ if (!conn->internal->disconnected) {
+ conn->internal->disconnected = TRUE;
+ SILC_FSM_SEMA_POST(&conn->internal->wait_event);
+ }
return SILC_FSM_FINISH;
}