Fix hang on stream termination if no frames can be captured #709
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.
Description
While testing with #707, I discovered an issue that was causing stream termination hangs that would prevent a client from reconnecting (or with #707, cause Sunshine to terminate itself). The issue is that the only time
display_t::capture()
will return to the capture thread or invoke the callback is when a frame is successfully captured or an error or reinit occurs. If it's just a normal timeout, the capture function will loop forever trying to capture a frame.To fix this, I added a parameter to the
snapshot_cb
callback that indicates whether a frame was captured or if this is a callback invocation caused by a timeout. Now thatsnapshot_cb
is being invoked for timeouts, it can check if capture should stop and returnnullptr
to indicate that.Screenshot
Issues Fixed or Closed
Type of Change
.github/...
)Checklist
Branch Updates
LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.