Neler yeni
XenForo Bannerlar
Modern AdBlock Uyarısı

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kod FDWATCH'ta "peer null" hatası sonrası sonsuz döngü sorununa çözüm

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
3,270
Tepkime puanı
4,782
Puanları
113
Yaş
31
Konum
Türkiye
Dc
fatihbulut
Merhaba arkadaşlar,

FDWATCH mekanizmasında karşılaştığım ve logları dolduran bir sorunun çözümünü paylaşmak istiyorum. Eğer siz de loglarınızda sürekli olarak "FDWATCH: peer null in event" hatasını görüyorsanız, bu çözüm işinize yarayebilir.

C++:
sys_err("FDWATCH: peer null in event: ident %d

db/src/ClientManager.cpp

Eski kod
C++:
sys_err("FDWATCH: peer null in event: ident %d", fdwatch_get_ident(m_fdWatcher, idx));

Yeni kodla değiştir
C++:
// Önce sorunlu dosya tanımlayıcısını (fd) bir değişkene alıyoruz.
int fd = fdwatch_get_ident(m_fdWatcher, idx);

// Hatayı bu değişkeni kullanarak logluyoruz.
sys_err("FDWATCH: peer null in event: ident %d", fd);

// EN ÖNEMLİ KISIM: Sorunlu olayı fdwach'tan temizleyerek döngüyü kırıyoruz.
fdwatch_clear_event(m_fdWatcher, fd, idx);

Asıl sorun şuydu: Kod, bu hatayı logladıktan sonra bu geçersiz olayı fdwatch kuyruğundan temizlemiyordu. Bu yüzden, bir sonraki kontrol döngüsünde aynı geçersiz olay tekrar tekrar işlenmeye çalışılıyor ve bu da sürekli olarak aynı hatanın loglara yazılmasına neden oluyordu. Bu durum hem CPU'yu gereksiz yere meşgul ediyor hem de log dosyasını şişiriyordu.

Neden bu şekilde çözüldü?

  • int fd = ...: Dosya tanımlayıcısını (fd) önce bir değişkene atamak, hem kodu daha okunabilir kılıyor hem de aynı fd değerini hem hata mesajında hem de olayı temizleme fonksiyonunda güvenli bir şekilde kullanmamızı sağlıyor.
  • fdwatch_clear_event(...): Bu fonksiyon, çözümün kilit noktasıdır. Hatalı olduğu tespit edilen olayı fdwatch mekanizmasından kaldırır. Böylece sistem, bir sonraki döngüde aynı hatalı olayı tekrar işlemeye çalışmaz ve sonsuz hata döngüsü engellenmiş olur.
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar