Linux'ta Steam istemcisi kararlılığı iyileştirildi
(ttimo.typepad.com)Steam istemcisi kararlılığı iyileştirildi
-
Arka plan: 5 Kasım tarihli Steam istemcisi güncellemesinde Linux'ta görülen bazı yaygın çökmeler düzeltildi. Bunlar arasında en büyük etkiye sahip olan değişiklik,
setenvvegetenvişlevlerinin kullanım biçiminin değiştirilmesi oldu. -
Sorun:
setenv, Linux'ta güvenli olmayan bir API olup çok iş parçacıklı ortamlarda kullanıldığında sorunlara yol açabiliyor.getenvçağrısından sonra başka bir iş parçacığında SIGABRT gibi çökmeler meydana gelebiliyor. -
Çözüm:
setenvçağrılarının büyük kısmı kaldırıldı ve süreç oluşturulurken ortam değişkenlerininexecvpeile aktarılması için refaktör yapıldı.getenvbağımlılığını azaltmak için çağrılar önbelleğe alındı.- Kalan
setenvkullanım senaryoları için, başlangıçta yeterince büyük değer tamponlarını önceden ayıran bir "ortam yöneticisi" eklendi.
-
Sonuç: Bu değişikliklerle SIGABRT görülme sıklığı önemli ölçüde azaldı. Ancak bu kusursuz bir çözüm değil; harici kütüphaneler
setenvçağırırsa çökme riski hâlâ var. -
Gelecek planları: glibc tarafında bu sorunu çözmek için, asenkron sinyal güvenliğini korurken
envpkullanımıyla senkronize olmanın yolları araştırılıyor. Bu çalışma karmaşık olsa da uzun vadede POSIX spesifikasyonundan sapmadan bir çözüm önerilmesi planlanıyor.
1 yorum
Hacker News görüşü
Red Hat'in grafik yığını kararlılık sorunları nedeniyle bir yama değerlendiriliyor
getenviçin thread safety düzeltmesinin glibc 2.41'e dahil edilme olasılığı yükseksetenv, ortam dizelerini zaten serbest bırakmadığı için ele alınması daha kolayunsetenv, eşzamanlılık sorunları nedeniyle karmaşıkgetenv'e kilit eklemek istenmemesinin nedeni async-signal-safety'yi korumakvfork+execvenedeniyle bellek sızıntılarını önlemeden ortam işleme düzeltmesi yapmak tartışmalıSteam'in Linux'ta iyi çalışmasına minnettarım
Ortam değişkenlerini önyükleme sırasında okuyup
setenvkullanmamak en iyi yöntemgetenv/setenv'i bir IPC mesajlaşma mekanizması olarak kullanmak sorun yaratabilirsetenv'in bir Linux API'si olup olmadığı sorgulanıyorsetenv, POSIX'te tanımlıdır ve Linux çekirdeğinde değil kullanıcı alanında uygulanırBir programın bir thread'de
setenvçağırıp başka bir thread'de etkisini istemesinin gerçekten gerekli olup olmadığı soruluyorSteam'in bağlantı olmadığından şikayet etmesiyle ilgili bir sorun var
Steam istemcisi ve Linux programlamasıyla ilgili içgörüler ilginç
Sorunu glibc içinde çözmek, işlevsellik açısından ödün vermeyi gerektirebilir
Steam istemcisinin render performansı, fare pencerenin içindeyken iyi değil
Linux Steam istemcisinde uzun süredir devam eden bir hata var