2 puan yazan GN⁺ 2024-11-12 | 1 yorum | WhatsApp'ta paylaş

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, setenv ve getenv iş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şkenlerinin execvpe ile aktarılması için refaktör yapıldı.
    • getenv bağımlılığını azaltmak için çağrılar önbelleğe alındı.
    • Kalan setenv kullanı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 envp kullanı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

 
GN⁺ 2024-11-12
Hacker News görüşü
  • Red Hat'in grafik yığını kararlılık sorunları nedeniyle bir yama değerlendiriliyor

    • getenv için thread safety düzeltmesinin glibc 2.41'e dahil edilme olasılığı yüksek
    • setenv, ortam dizelerini zaten serbest bırakmadığı için ele alınması daha kolay
    • unsetenv, eşzamanlılık sorunları nedeniyle karmaşık
    • getenv'e kilit eklemek istenmemesinin nedeni async-signal-safety'yi korumak
    • vfork+execve nedeniyle 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 setenv kullanmamak en iyi yöntem

    • Yeni bir süreç oluştururken mevcut ortam kopyalanıp yeni değerler güncellenmeli
    • getenv/setenv'i bir IPC mesajlaşma mekanizması olarak kullanmak sorun yaratabilir
  • setenv'in bir Linux API'si olup olmadığı sorgulanıyor

    • setenv, POSIX'te tanımlıdır ve Linux çekirdeğinde değil kullanıcı alanında uygulanır
  • Bir programın bir thread'de setenv çağırıp başka bir thread'de etkisini istemesinin gerçekten gerekli olup olmadığı soruluyor

    • GLIBC, tehlikeli fonksiyonları iyi belgeliyor; bu yüzden kilitleme/kopyalama eklenebilir
  • Steam'in bağlantı olmadığından şikayet etmesiyle ilgili bir sorun var

    • 'Yeniden dene' düğmesine birkaç kez basınca çalışıyor ama kullanışsız
  • Steam istemcisi ve Linux programlamasıyla ilgili içgörüler ilginç

    • Sürüm notlarının neden ayrıntılı olmadığını anlıyorum, ancak "genel çökme düzeltmeleri" ifadesi olanı olduğundan küçük gösteriyor
  • Sorunu glibc içinde çözmek, işlevsellik açısından ödün vermeyi gerektirebilir

    • Uzun vadede makul bir öneri geliştirilebilirse bunun peşinden gidilebilir
  • Steam istemcisinin render performansı, fare pencerenin içindeyken iyi değil

  • Linux Steam istemcisinde uzun süredir devam eden bir hata var

    • Steam bir günden uzun süre açık kalınca pencere handle'ları tükeniyor ve yeni grafik uygulamaları/pencereleri açılamıyor
    • Steam Chat kullanıldığında sorun daha hızlı ortaya çıkıyor
    • Bu sorun GitHub'da belgelenmişti ama sebepsiz yere kapatıldı
    • Ben şahsen her gün Steam'i yeniden başlatıyorum
    • Bu sorunu KDE/Wayland ve X11'de de gözlemledim