Comments (4)
Interesting point. I think that code was designed to handle the case where an app did not use the shared_ptr interface to open the stream. But that branch may also be taken if someone used the shared pointer but closed the stream from the app before the error callback occured!
from oboe.
I tried to force a race condition by adding a 4 second sleep in internalErrorCallback()
right before I promote the weak pointer to a strong pointer.
Then I play a stream in TEST OUTPUT,
unplugged the USB headset,
then hit the CLOSE button.
But instead of taking the RAW pointer branch it too this branch:
} else if (stream != oboeStream->getUnderlyingStream()) {
LOGW("%s() stream already closed or closing", __func__);
That is because the close() call nulled out the underlying stream.
We should write a test that verifies that the raw ptr branch is only taken when the app does not use the shared_ptr when opening a stream.
Then we can maybe remove the API for creating a stream using anything other than the shared_ptr.
from oboe.
I took another look into the framework's code. And I noticed that we had the protection from framework side that it only called the error callback from the data callback thread. In that case, this should be safe if the client call close
before freeing the shared pointer as that the stream can only be closed after joining the data callback thread.
It is not able to reproduce such a crash as the code is pretty well written for OboeTester. Looking into OboeTester's code, it closes the stream before freeing the shared pointer. However, I was able to cause a crash by removing the close. Of course, for causing a crash, the sleep in the oboe error callback is also added in my local code to simulate a race condition.
from oboe.
it only called the error callback from the data callback thread.
Is that true for both MMAP and Legacy streams?
from oboe.
Related Issues (20)
- Flowgraph call count needs cleanup
- OboeTester automation buffer_bursts not updating BufferSize UI properly
- SampleRateConverter in flowgrap was reading out of bounds on first call
- Unit tests are using deprecated raw pointer, should use shared_ptr
- Unit tests failing in VerifyFullDuplexStream, callback count off
- OboeTester analyzer crashes with assertion "numSamples <= mMaxSamples" failed HOT 1
- FifoBuffer.getFullFramesAvailable() can be const
- AppCompat and other changes needed for google3 build HOT 1
- How to import iolib/parselib HOT 1
- Turn on Oboe sample rate conversion by default
- System properties like "aaudio.mmap_policy" going away, need fallback solution
- Time Stretching with Oboe and SoundTouch
- Oboe sometimes cannot play very short sounds HOT 1
- Pure virtual function called! HOT 7
- Review destructors in Oboe
- oboe crash in android::CallbackProtector::enterCbIfOk(android::sp<android::CallbackProtector> const&) HOT 3
- FullDuplexStream should use shared_ptr HOT 1
- Possible crash on disconnect with streams using Oboe sample rate conversion HOT 1
- FullDuplexStream tests are using the deprecated openStream
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from oboe.