More client library rewrites (added rekey)
[silc.git] / lib / silcclient / command.c
index 468ac1bb243e168c552f849ac5980b74bf45c96a..7ffa52fa36f471a90d84ecfcb6f5014447a41bfb 100644 (file)
@@ -352,6 +352,12 @@ void silc_client_command_free(SilcClientCommandContext cmd)
   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);
@@ -1079,8 +1085,10 @@ SILC_FSM_STATE(silc_client_command_quit_final)
                 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;
 }