Zonza ne se lance plus qu'une fois a la fois
Deux bundles portant l'identifiant cloud.mrtechlab.zonza etaient enregistres aupres de LaunchServices : /Applications/Zonza.app et un fantome laisse dans la Corbeille le 13 juin, dont le stub visait l'ancien chemin du depot — valide jusqu'a aujourd'hui. Les deux etaient donc lancables simultanement. Chaque instance chargeait son propre modele MLX-Whisper medium et captait la MEME hotkey globale : un seul appui declenchait deux transcriptions, la machine saturait. Le fantome est desenregistre, mais la classe de bug revient au moindre bundle egare. D'ou un verrou exclusif (flock non bloquant) pris au demarrage : la seconde instance renonce et sort. Le noyau libere le verrou meme apres un plantage, donc pas d'orphelin. Prouve avec le vrai binaire : 2e lancement direct -> "[garde] une autre instance tourne deja", 1 seul process ; et controle negatif, seule elle demarre bien. 27 tests passent (22 + 5 nouveaux). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -28,7 +28,7 @@ from PyObjCTools import AppHelper
|
||||
from pynput import keyboard
|
||||
|
||||
from controller import ZonzaController
|
||||
from core import CONFIG, validate_config
|
||||
from core import CONFIG, acquire_single_instance_lock, validate_config
|
||||
from pulse_window import PulseWindow
|
||||
|
||||
_STATE_TITLES = {
|
||||
@@ -127,6 +127,13 @@ class ZonzaApp(NSObject):
|
||||
|
||||
|
||||
def main():
|
||||
# une seule instance a la fois : sinon deux modeles en RAM et la meme
|
||||
# hotkey captee deux fois (cf acquire_single_instance_lock).
|
||||
lock = acquire_single_instance_lock()
|
||||
if lock is None:
|
||||
print("[garde] une autre instance de Zonza tourne deja — arret.")
|
||||
return
|
||||
main._lock = lock # garder le verrou vivant tant que le process vit
|
||||
validate_config(CONFIG)
|
||||
# si l'Accessibilité n'est pas accordée, macOS affiche sa popup officielle
|
||||
# (« Zonza souhaite contrôler cet ordinateur ») et ajoute l'app à la liste —
|
||||
|
||||
Reference in New Issue
Block a user