dbus2 / zbus-old

Rust D-Bus crate.
https://gitlab.freedesktop.org/dbus/zbus
Other
49 stars 13 forks source link

Limit outbound message queue #117

Open zeenix opened 3 years ago

zeenix commented 3 years ago

The following discussion from !194 should be addressed:

This should be configurable, just like the inbound queue in Connection.

zeenix commented 2 years ago

In GitLab by @danieldg on Aug 3, 2021, 02:40

If you want to use completely fair backpressure to limit the queue size, 71ff7c1977502fce695ae43b4fcf1112f0b6850f may need to be reverted because the Sink API requires implementing a reservation system but doesn't provide an API for cancelling a reservation. However, if you're fine with not handling byzantine edge-cases, you can provide "unfair" backpressure by checking the current queue size on poll_ready and then allowing start_send to "overfill" the queue.

For reference, if you create 100 threads (tasks don't have this particular race) that all call SinkExt::feed(item) on an outbound queue that can only fit one more message, and they all call poll_ready before any of them call start_send (because the OS scheduler hates you), then they will all see the same single open slot and put their item there.