fix: make reload::Subscriber
compatible with per-subscriber filters
#2965
+75
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
If the
reload::Subscriber
was used with a filteredSubscribe
, the filters panicked withdebug_assertions
because nothing cleared interests of the filters. This is becauseon_subscribe
was not called and so theRegistry
didn't know there were filters involved.See the new test for an example of what currently panics on
master
.downcast_raw
also did not special-case the magic filter marker so even if the inner subscriber was filtered, other layers could never find out.Solution
I've added an implementation for
on_subscribe
inreload::Subscriber
so that filters are properly registered within theRegistry
.I've also added an unsafe implementation to downcasting to special-case the magic marker. I've tried to make sure for this to be completely safe even if the caller decides to dereference the returned pointer. This implementation is needed so that
Layered
and others can tell whether thereload::Subscriber
uses psf or not.