* update all READMEs with notices about the name change
* update changelog for 0.24
* bump crate versions to 0.24
* update version notice information
* update readmes to back reference trust-dns
* rename all crates to hickory counterparts
* replace all Trust-DNS references in code and comments with Hickory DNS
* rename all Trust-DNS references to Hickory DNS in non-code
* rename all trust-dns-resolver references to hickory-resolver
* rename all trust-dns-client references to hickory-client
* rename all trust-dns-proto references to hickory-proto
* rename all trust-dns-server references to hickory-server
* rename all trust-dns-compatibility references to hickory-compatability
* rename all trust-dns-integration references to hickory-integration
* rename all trust-dns-util references to hickory-util
* Update MIT licenses to reference Hickory DNS
* update all trust-dns references to hickory-dns
* update all bluejekyll github references to hickorydns org
* Update name in Changelog
* make sure hickory-dns logs during tests
* add changelogs for recent main additions
* fix references to trust-dns and hickory in architecture
* update a few trust-dns references in READMEs
* fixup some dangling trust_dns references
* replace fka with formerly in change log
* replace all hickoydns org references to hickory-dns
* replace all http links with https
* update logos
* update hickorydns to hickory-dns for all other org references
* fix Notices of Trust-DNS to Hickory in each Readme
When serializing a ClientSubnet, if the source prefix is larger than
the address itself, we return an error. However, when deserializing
the same type we will happily take an invalid prefix. Fix this
consistency issue by rejecting invalid prefixes during
deserialization.
Previously, the `reap_tasks` function could cause a tokio task to spinloop, preventing it from being cancelled.
This is because `FutureExt::now_or_never` returns an Option<T> where T is the inner future's resolution type.
If `join_set.join_next()` returned None, indicating there are no longer tasks to join, the `FutureExt::now_or_never` would return `Some(None)`.
However, the `is_some()` spinloop in this function would see the `Some(None)` and busy loop calling `FutureExt::now_or_never`.
This causes the tokio task to fail to be cancelled properly as it never yields to the executor.
The fix here is to use `Option::flatten` to transform the nested Option.
Now, the call to `reap_tasks` will only loop when the inner `join_set.join_next` returns `Some(..)`, indicating that a task is already complete.
When there are no tasks complete, or when the `JoinSet` is empty and returns `None`, the `reap_tasks` function will immediately yield.