Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

fix(mcp): McpServerController.start/stop race creates a second socket host and leaks the first

Ouverte
#1,563 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
68/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
dart, flutter
Domaine
backend, desktop

Piste de recherche

Start with lib/core/mcp/mcp_server_controller.dart:102-124 and trace how start() and stop() handle overlapping calls and the host.changes subscription. Add tests for two concurrent start() calls creating one host and for stop() during startup ending in a stopped state; done when both behaviors pass and the subscription is cancelled on stop.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug core P2 stability

Problem

McpServerController.start() (lib/core/mcp/mcp_server_controller.dart:102-124) checks _host != null first, then awaits _version() and host.start(), and assigns _host only after that. Two overlapping calls (startIfEnabled + setEnabled(true), repeated toggle, regenerateToken) create two McpSocketHosts: the first is leaked (never stopped), both write the same endpoint file and the token in the file may not belong to the host that is tracked.

stop() during an in-flight start() sees _host == null, does nothing, and the server comes up afterwards while the setting says disabled.

host.changes.listen is also never cancelled.

Expected

  • Serialize start / stop (single in-flight future or a lock) and assign _host before the first await.
  • Cancel the changes subscription on stop.
  • Test: concurrent start() x2 yields one host; stop() during start() ends stopped.
Langage dominant
Dart
Étoiles
23
Forks
1
Merge moyen
31 min
PR mergées (30 j)
570

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de QueryaHub/Querya-Desktop

Toutes les issues de QueryaHub/Querya-Desktop

Issues similaires

Plus d'issues Dart

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.