silc_client_command_callback(SilcClientCommandContext cmd, ...)
{
SilcClientCommandReplyCallback cb;
+ SilcList list;
va_list ap, cp;
va_start(ap, cmd);
}
/* Reply callback */
- silc_list_start(cmd->reply_callbacks);
- while ((cb = silc_list_get(cmd->reply_callbacks)))
+ list = cmd->reply_callbacks;
+ silc_list_start(list);
+ while ((cb = silc_list_get(list)))
if (!cb->do_not_call) {
silc_va_copy(cp, ap);
cb->do_not_call = !cb->reply(cmd->conn->client, cmd->conn, cmd->cmd,
SilcClientConnection conn = cmd->conn;
SilcArgumentPayload args = NULL;
+ if (conn->internal->disconnected) {
+ SILC_LOG_DEBUG(("Command %s canceled", silc_get_command_name(cmd->cmd)));
+ silc_list_del(conn->internal->pending_commands, cmd);
+ return SILC_FSM_FINISH;
+ }
+
SILC_LOG_DEBUG(("Command %s timeout", silc_get_command_name(cmd->cmd)));
/* Timeout, reply not received in timely fashion */