test: Add regression test for stopping a stream with a failing callback. - #858
Merged
Merged
Conversation
Returning an error from the data callback makes AAudio stop the stream itself, from the callback thread, before the stream has been reported as started. The stream goes STARTING -> STOPPED without ever passing through STARTED, and a backend waiting for one specific state rather than for any settled state waits forever, taking cubeb_stream_stop() down with it. This is the hang fixed in 92ab428. The failure mode is a hang rather than a wrong result, so the calls under test run on a separate thread and the test fails if they do not return within 30s, leaking the context rather than tearing it down underneath a thread still stuck inside cubeb. Return codes are not checked: a stream whose callback has already errored out may legitimately refuse to start or stop, so what is asserted is only that these entry points return at all. Against the parent of 92ab428 this fails 5/5 on the aaudio backend, and the rest of test_sanity still runs to completion.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Returning an error from the data callback makes AAudio stop the stream itself, from the callback thread, before the stream has been reported as started. The stream goes STARTING -> STOPPED without ever passing through STARTED, and a backend waiting for one specific state rather than for any settled state waits forever, taking cubeb_stream_stop() down with it. This is the hang fixed in 92ab428.
The failure mode is a hang rather than a wrong result, so the calls under test run on a separate thread and the test fails if they do not return within 30s, leaking the context rather than tearing it down underneath a thread still stuck inside cubeb. Return codes are not checked: a stream whose callback has already errored out may legitimately refuse to start or stop, so what is asserted is only that these entry points return at all.
Against the parent of 92ab428 this fails 5/5 on the aaudio backend, and the rest of test_sanity still runs to completion.