🌐 v1.1.3 Release Notes / Sürüm Notları
🇬🇧 English
v1.1.3 - Stability Refactor & Crash Prevention Update
This update is a comprehensive stability and code quality release, derived from three independent code review reports. It focuses on eliminating crash risks, memory leaks, performance bottlenecks, and security vulnerabilities without changing any UI functionality.
Critical Fixes:
- Unified
_tray_instanceArchitecture: Resolved a critical global variable conflict where_tray_instancewas defined in two places (ui.pyandui_utils.py) with different references, causingcleanup_tray_icon()andcleanup_on_exit()to silently fail. Now a single centralized reference inui_utils.pyis used, ensuring reliable tray icon and server process cleanup on application exit or crash. - Removed Fragile
sys.modulesAccess: Eliminated all race-condition-prone dynamic module lookups viasys.modules['LlamaTray.ui']incleanup_tray_icon(),cleanup_on_exit(), andAboutDialog. All components now use the centralizedui_utils._tray_instancereference directly. - Duplicate Cleanup Registration Prevented: Removed the duplicate
atexit.register(cleanup_on_exit)mechanism. Cleanup is now handled exclusively through the QtaboutToQuitsignal, preventing double-execution and potential crashes. - closeEvent NoneType Crash Prevention: Added
callable(original_close_event)check and safeQMainWindow.closeEvent(self.window, event)delegation to preventTypeError: 'NoneType' object is not callablecrashes when closing the window. - QComboBox Validator Fix: Fixed
QComboBox.setValidator()which silently fails in PyQt6. Now correctly usesself.context_size_combobox.lineEdit().setValidator(QIntValidator(512, 1000000))to properly validate context size input.
Server Process Management Hardening:
- Shell Injection Prevention: Replaced
["bash", "-c", f"lsof -ti:{port} | xargs kill -9"]with safe list-basedsubprocess.run(["lsof", "-ti", str(port)])calls, eliminating shell injection risk. - Graceful Process Termination: Port cleanup now sends
SIGTERMfirst, polls for port release with 0.5s intervals (up to 3 seconds), and only falls back toSIGKILLif the process doesn't respond gracefully. find_llama_server()Caching: Results ofshutil.which("llama-server")are now cached at module level, eliminating redundantwhichlookups instart_server().
Performance Optimizations:
- Non-blocking CPU Monitoring: Changed
psutil.cpu_percent(interval=0.1)tointerval=0, removing the 100ms UI thread blockage that occurred every second during system monitor updates. - NVML Resource Leak Fix: Added
pynvml.nvmlShutdown()call inSystemMonitor.__del__()and a dedicated_shutdown_gpu()method, preventing NVIDIA driver resource leaks on application exit.
Desktop Environment Compatibility:
- Dynamic QT Theme Detection: Replaced hardcoded
os.environ["QT_QPA_PLATFORM_THEME"] = "kde"with dynamic detection usingXDG_CURRENT_DESKTOP. Now correctly sets the theme for KDE, GNOME, or falls back to Qt defaults for other environments (XFCE, i3, Sway, etc.).
Code Quality Cleanup:
- Removed Unused Imports: Cleaned up unused
import jsonandimport osinprofile_manager.py. - Version Bump: All version strings updated to
v1.1.3.
🇹🇷 Türkçe
v1.1.3 - Kararlılık Refactoring ve Çökme Önleme Güncellemesi
Bu güncelleme, üç bağımsız kod inceleme raporundan elde edilen bulgular doğrultusunda hazırlanmış kapsamlı bir kararlılık ve kod kalitesi sürümüdür. Herhangi bir UI işlevselliğini değiştirmeden çökme risklerini, bellek sızıntılarını, performans darboğazlarını ve güvenlik açıklarını ortadan kaldırmaya odaklanır.
Kritik Düzeltmeler:
- Birleşik
_tray_instanceMimarisi:_tray_instancedeğişkeninin iki ayrı yerde (ui.pyveui_utils.py) farklı referanslarla tanımlanmasından kaynaklanan kritik global değişken çakışması giderildi. Artıkui_utils.py'deki tek bir merkezi referans kullanılarak, uygulama kapanışında veya çökmesinde tepsi ikonu ve sunucu sürecinin güvenilir şekilde temizlenmesi sağlanıyor. - Kırılgan
sys.modulesErişimi Kaldırıldı:cleanup_tray_icon(),cleanup_on_exit()veAboutDialogiçindeki race-condition riskli tüm dinamik modül okumaları (sys.modules['LlamaTray.ui']) temizlendi. Tüm bileşenler artık doğrudan merkeziui_utils._tray_instancereferansını kullanıyor. - Çifte Temizlik Kaydı Önlendi: Yinelenen
atexit.register(cleanup_on_exit)mekanizması kaldırıldı. Temizlik artık yalnızca QtaboutToQuitsinyali ile yönetilerek çift çalıştırma ve olası çökmeler önleniyor. - closeEvent NoneType Çökme Önleme: Pencere kapatılırken
TypeError: 'NoneType' object is not callablehatasıyla çökmeyi önlemek içincallable(original_close_event)kontrolü ve güvenliQMainWindow.closeEvent(self.window, event)delegasyonu eklendi. - QComboBox Validator Düzeltmesi: PyQt6'da sessizce başarısız olan
QComboBox.setValidator()kullanımı düzeltildi. Artıkself.context_size_combobox.lineEdit().setValidator(QIntValidator(512, 1000000))ile context size girişi doğru şekilde doğrulanıyor.
Sunucu Süreç Yönetimi Güçlendirmesi:
- Shell Injection Önlemi:
["bash", "-c", f"lsof -ti:{port} | xargs kill -9"]yapısı güvenli liste tabanlısubprocess.run(["lsof", "-ti", str(port)])çağrılarıyla değiştirilerek shell injection riski tamamen ortadan kaldırıldı. - Kademeli Süreç Sonlandırma: Port temizliği artık önce
SIGTERMgönderiyor, 0.5 saniye aralıklarla portun boşalmasını poll ediyor (maksimum 3 saniye) ve sadece süreç yanıt vermezseSIGKILLaşamasına geçiyor. find_llama_server()Önbellekleme:shutil.which("llama-server")sonucu modül seviyesinde önbelleğe alınarakstart_server()içindeki gereksiz ikincilwhicharamaları ortadan kaldırıldı.
Performans İyileştirmeleri:
- Bloke Etmeyen CPU İzleme:
psutil.cpu_percent(interval=0.1)değeriinterval=0olarak değiştirilerek sistem monitörü güncellemeleri sırasında her saniye yaşanan 100ms'lik UI thread blokajı kaldırıldı. - NVML Kaynak Sızıntısı Düzeltmesi:
SystemMonitor.__del__()içinepynvml.nvmlShutdown()çağrısı ve özel_shutdown_gpu()metodu eklenerek uygulama kapanışında NVIDIA sürücü kaynak sızıntısı önlendi.
Masaüstü Ortamı Uyumluluğu:
- Dinamik QT Tema Algılama: Sabit
os.environ["QT_QPA_PLATFORM_THEME"] = "kde"satırı,XDG_CURRENT_DESKTOPdeğişkenini kullanan dinamik algılama ile değiştirildi. Artık KDE, GNOME için doğru tema ayarlanıyor, diğer ortamlarda (XFCE, i3, Sway vb.) Qt varsayılanları kullanılıyor.
Kod Kalitesi Temizliği:
- Kullanılmayan Import'lar Temizlendi:
profile_manager.py'deki kullanılmayanimport jsonveimport ossatırları kaldırıldı. - Sürüm Güncellemesi: Tüm sürüm bilgileri
v1.1.3olarak güncellendi.
Full Changelog: v1.1.2...v1.1.3