aatxe / irc

the irc crate – usable, async IRC for Rust
Mozilla Public License 2.0
526 stars 100 forks source link

Busy transport causes PONG to fail assertion and panic. #174

Open sqwishy opened 5 years ago

sqwishy commented 5 years ago

I get a panic from an assertion failure in debug builds after starting a client that is configured to join a large number of channels. The message burst stuff is at its defaults, after maybe a minute or two, it panics while trying to respond to a ping. Maybe because the transport is considered not writable due to the throttling?

If my understanding is correct, maybe if it fails to send a ping immediately, it can set a flag that the transport can look for whenever it does become writable to know to preempt the queued messages and send a pong?

thread 'irc' panicked at 'assertion failed: result.is_ready()', /home/sqwishy/.cargo/registry/src/github.com-1ecc6299db9ec823/irc-0.13.6/src/client/transport.rs:122:25
aatxe commented 5 years ago

Your explanation about the throttling seems plausible to me, and if so, something like your proposed solution should work. I'll investigate when I have the chance (but things are quite busy right now).