Skip to content

Commit 032c417

Browse files
committed
Added _kill_all_processes method to clean up compilation processes and UI in case of errors
1 parent 0c3b3b9 commit 032c417

1 file changed

Lines changed: 84 additions & 25 deletions

File tree

Core/Compiler/compiler.py

Lines changed: 84 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from PySide6.QtWidgets import QMessageBox
1717
import os
18+
import traceback
1819
from Core.ark_config_loader import (
1920
load_ark_config,
2021
should_exclude_file,
@@ -24,6 +25,70 @@
2425
)
2526

2627

28+
def _kill_all_processes(self) -> None:
29+
"""Tue tous les processus de compilation en cours et réinitialise l'état.
30+
31+
Cette fonction doit être appelée en cas d'erreur pour nettoyer proprement
32+
tous les processus lancés et réinitialiser l'interface utilisateur.
33+
"""
34+
try:
35+
# Arrêter tous les processus en cours
36+
if hasattr(self, 'processes') and self.processes:
37+
for pid, proc in list(self.processes.items()):
38+
try:
39+
if proc is not None and proc.state() == proc.Running:
40+
proc.terminate()
41+
proc.waitForFinished(2000) # Attendre max 2s
42+
if proc.state() == proc.Running:
43+
proc.kill()
44+
proc.waitForFinished(1000)
45+
except Exception:
46+
pass
47+
# Vider le dictionnaire des processus
48+
self.processes.clear()
49+
except Exception:
50+
pass
51+
52+
try:
53+
# Vider la file d'attente
54+
if hasattr(self, 'queue'):
55+
self.queue.clear()
56+
except Exception:
57+
pass
58+
59+
try:
60+
# Réinitialiser les compteurs
61+
if hasattr(self, 'current_compiling'):
62+
self.current_compiling.clear()
63+
except Exception:
64+
pass
65+
66+
# Réactiver les contrôles UI
67+
try:
68+
self.set_controls_enabled(True)
69+
except Exception:
70+
pass
71+
72+
try:
73+
if hasattr(self, "compiler_tabs") and self.compiler_tabs:
74+
self.compiler_tabs.setEnabled(True)
75+
except Exception:
76+
pass
77+
78+
try:
79+
if hasattr(self, 'progress'):
80+
self.progress.setRange(0, 1)
81+
self.progress.setValue(0)
82+
except Exception:
83+
pass
84+
85+
try:
86+
if hasattr(self, '_compile_continued'):
87+
self._compile_continued = False
88+
except Exception:
89+
pass
90+
91+
2792
# Nouvelle version de try_start_processes pour gérer les fichiers ignorés dynamiquement
2893
def _continue_compile_all(self):
2994
# Charger la configuration ARK complète
@@ -277,6 +342,19 @@ def _after_bcasl(_report):
277342
tmr2.stop()
278343
except Exception:
279344
pass
345+
346+
# Vérifier si BCASL a eu des erreurs
347+
if _report is not None and not _report.ok:
348+
error_items = [item for item in _report.items if not item.success]
349+
error_msg = ", ".join([f"{item.plugin_id}: {item.error}" for item in error_items])
350+
try:
351+
self.log.append(f"❌ Erreur BCASL: {error_msg}\n")
352+
except Exception:
353+
pass
354+
# Nettoyer tout et réactiver l'UI
355+
_kill_all_processes(self)
356+
return
357+
280358
if not getattr(self, "_compile_continued", False):
281359
self._compile_continued = True
282360
try:
@@ -287,41 +365,22 @@ def _after_bcasl(_report):
287365
_continue_compile_all(self)
288366
except Exception as _e:
289367
try:
290-
import traceback as _tb
291368
self.log.append(
292-
f"⚠️ Exception dans _continue_compile_all: {_e}\n{_tb.format_exc()}\n"
369+
f"❌ Erreur fatale dans _continue_compile_all: {_e}\n{traceback.format_exc()}\n"
293370
)
294371
except Exception:
295372
pass
296-
# Réactiver l'UI en cas d'erreur
297-
try:
298-
self.set_controls_enabled(True)
299-
except Exception:
300-
pass
301-
try:
302-
if hasattr(self, "compiler_tabs") and self.compiler_tabs:
303-
self.compiler_tabs.setEnabled(True)
304-
except Exception:
305-
pass
373+
# En cas d'erreur: tout tuer et réinitialiser
374+
_kill_all_processes(self)
306375
except Exception as _e:
307376
try:
308-
import traceback as _tb
309-
310377
self.log.append(
311-
f"⚠️ Exception _after_bcasl: {_e}\n{_tb.format_exc()}\n"
378+
f"❌ Erreur critique dans _after_bcasl: {_e}\n{traceback.format_exc()}\n"
312379
)
313380
except Exception:
314381
pass
315-
# Réactiver l'UI en cas d'erreur
316-
try:
317-
self.set_controls_enabled(True)
318-
except Exception:
319-
pass
320-
try:
321-
if hasattr(self, "compiler_tabs") and self.compiler_tabs:
322-
self.compiler_tabs.setEnabled(True)
323-
except Exception:
324-
pass
382+
# En cas d'erreur: tout tuer et réinitialiser
383+
_kill_all_processes(self)
325384

326385
_run_bcasl_async(self, _after_bcasl)
327386
return # différer la suite dans le callback pour ne pas bloquer

0 commit comments

Comments
 (0)