[bug] EventPool.request — geri-dönüşsüz (WOM) paketlerde Promise askıda kalıyor #33
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sorun:
EventPool.requestçağrısından sonra, dönen paketin bir WOM (response beklemeyen / geri-dönüşsüz) paketi olduğu belli olsa bile Promiseresolveiçin bekletiliyor — yani asla çözülmeyen bir Promise askıda kalıyor.Beklenen: Gönderilen paket WOM ise Promise ya direkt resolve edilmeli ya da hiç oluşturulmamalı.
requestsemantiği yalnızca response bekleyen paketlere ayrılmalı; WOM yolu ayrı olmalı.Go portu notu: Bu davranış WSTS Go implementasyonunda baştan doğru kurulmalı — WOM gönderiminde bekleyen (waiter/channel) bırakılmamalı.
Bitti kriteri: WOM gönderiminde askıda Promise/waiter kalmıyor; request/response ve WOM yolları ayrı; regression testi var.
[bug] Bilinen engine bug'ları (eski #19, #9)to [bug] EventPool.request — geri-dönüşsüz (WOM) paketlerde Promise askıda kalıyorDüzeltildi (go-rewrite, commit
91ebbef).Kök neden (iki yönlü): (a) Engine dispatcher numeric-id + action 'R' olan her frame'e anında
[result,id,'E']yanıtlıyordu — handler nil dönse bile[null,id,'E']. (b) SDKEventPool.request()WOM paketler için de waiter (promise) kaydediyordu. Sonuç: cevabı out-of-band gelenrequest/to'da sahte yanıt waiter'ı erken çözüp siliyor, gerçek cevap (response/to) kayboluyordu; saf WOM'da gereksiz waiter kalıyordu.Çözüm:
nildönerse dispatcher yanıt göndermez (nil= 'cevabım yok / out-of-band gelecek'). Tel şekilleri değişmedi; yalnızca SDK'nın kullanamadığı sahtenull-Eframe'i kalktı.EventPool.only()(WOM, waiter bırakmaz) eklendi;Peer.sendveRoom.sendhandshake'siz dalı artıkonly()kullanır.request()yalnızca cevap bekleyen paketlere ayrıldı. Public API sabit.Bitti kriteri karşılandı: WOM gönderiminde askıda promise/waiter kalmıyor; request/response ve WOM yolları ayrı; regression testleri var (
TestServerNoReplyOnNilResult,TestRequestResponseRoundTrip).go test -race ./...yeşil.