Remove InputGuard, refactor test components without it #64
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.
Rationale:
InputGuard
is unsafe to use; components for test provide a bad example.Explanation: The key problem is that after a channel is closed, it never blocks reads. The existing implementation leads to a dead
select
loop, which eventually exits whenselect
randomly chooses another execution branch. Updated component implementations provide a more accurate example of handling closed channels in go.Additionally, keeping a map of inputs is expensive and totally unnecessary, as it can be seen from the updated impl.
Finally, if we were to preserve
InputGuard
-s for some reason, the implementation would have to be changed for safety. Consider what would happen if you accidentallyComplete()
-d a non-existing port. What would happen if you accidentallyComplete()
-d the same port twice?