Allow determining if inbound messages are being lost
Currently, if dbus sends a large enough burst of messages to us, we start dropping the oldest ones with no indication that this happened on any Stream implementation. While this mostly just causes timeouts in anyone making method calls (or exposes the lack of timeout handling), any caching that expects to be invalided by signals will be silently incorrect - which will likely result in some very hard-to-debug issues once property caching becomes a thing.
I'm not sure what solution is best here: there's a lot of code that relies on the fact that a given Connection object might never use its Stream impl, and overruns on those receivers should be ignored. The presence of non-draining Connections also makes it difficult to set a very high value for max_queued as you are basically guaranteed to store that many Arc objects unless you always drain the Stream from any inactive Connection object.
Tokio's broadcast channel will notify receivers if there was an overflow; maybe this feature needs to be added to async_broadcast? A property cache could use such a notification to invalidate itself and re-run GetAll.
Alternatively, a way to disable overflow and explicitly mark some Connection instances as not-used-for-Stream (using async_broadcast::InactiveReceiver) would allow this to be handled by temporarily blocking incoming messages until the queue has shrunk. That behavior would need to be opt-in because it has a good chance to cause deadlocks if some Stream is not being polled (likely because its task is blocking on a different await
).