Make global EpollRuntime
independent of IORuntime
#44
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.
This fixes an issue where
EpollApp
s were hanging upon the first async I/O op.The problem was, unbeknownst to me, if you override the
runtime
in anIOApp
it does not get installed asIORuntime.global
. BecauseEpollRuntime.global
was working in terms ofIORuntime.global
, this was causing twoEpollRuntime
s to be created, with I/O callbacks registered on the the second one not used by theEpollApp
. Thus, the hang.The fix is to just make the
EpollRuntime.global
completely independent ofIORuntime.global
. There is a bit of a footgun here, since two runtimes cannot coexist in a meaningful way, but I am following the Cats Effect design choice that an overridden runtime should not replace its own global runtime.To explore this issue I created an example app and reorganized some of the test scaffolds. The example app is now run as part of the CI workflow.