1 puan yazan GN⁺ 2024-07-08 | Henüz yorum yok. | WhatsApp'ta paylaş
  • malloc'ın SerenityOS'un JPGLoader'ını neden bozduğu

  • SerenityOS'ta JPG görüntülerini decode ederken renklerin yanlış gösterilmesine yol açan bir hata araştırılıyor

    • Sorun RGB ile BGR'nin karıştırılması gibi görünse de, kod düzeltildikten sonra bile çözülmüyor
  • Bisecting ile sorunun izini sürme

    • Son 1000 commit arasında bisecting yapılarak sorunun kaynağı bulunmaya başlanıyor
    • SerenityOS, C++ STL'ye benzeyen ama daha okunabilir olan kendi standart kütüphanesi AK'yi kullanıyor
    • AK'deki değişiklikler tüm işletim sistemini etkilediği için build süresi uzuyor
  • Bisect sonucu

    • Soruna yol açan commit bulunuyor: malloc_good_size() işlevini uygulayan commit
    • Bu commit, bellek ayırma boyutunu optimize ederek bellek israfını azaltan bir özellik ekliyor
  • Şaşırtıcı keşif

    • HashTable ve Vector'ın sorunun kaynağı olabileceği araştırılıyor
    • HashTable'ın kapasitesi değiştirildikten sonra sorun çözülüyor
  • Deterministik olmayan seri bileşen yinelemesi

    • JPGLoader, JPG dosyasının bileşenlerini HashTable içinde saklıyor ve bunları tekrar tekrar kullanıyor
    • Bileşenlerin sırası deterministik olmadığı için sorun ortaya çıkıyor
  • Hatanın nedeni

    • Sıralamanın gerekli olduğu nesneler HashTable içinde tutuluyor ve varsayılan iterator kullanılıyor
    • Bileşen ID'lerinin hash değerleri tesadüfen doğru sıraya denk geliyor
    • HashTable boyutunun değişmesiyle sıra bozuluyor ve sorun ortaya çıkıyor
  • Çözüm

    • JPGLoader'ın bileşenler üzerinde deterministik şekilde yineleme yapması sağlanıyor
    • HashTable yerine sıralamayı garanti eden bir veri yapısı kullanılıyor
  • Son düşünceler

    • Basit bir sorun bile büyük hataları ortaya çıkarabilir
    • Sorun kökten çözülerek tekrar yaşanması önleniyor
  • Teşekkür

    • Debug sürecinde yardımcı olan çalışma arkadaşlarına teşekkür ediliyor
    • Hatanın bulunup çözülmesi sürecinde çok şey öğreniliyor

GN⁺ özeti

  • Bu yazı, SerenityOS'ta ortaya çıkan JPG görüntü decode hatasının izlenmesi ve çözülmesi sürecini ele alıyor
  • HashTable'ın deterministik olmayan sıralamasından kaynaklanan sorun, deterministik sıraya geçilerek çözülüyor
  • Yazı, yazılım debugging sürecinin önemini ve karmaşıklığını iyi gösteriyor
  • Benzer işlevlere sahip projeler arasında Linux'un libjpeg'i de bulunuyor

Henüz yorum yok.

Henüz yorum yok.