diff options
author | Shivaprasad Hongal <shongal@codeaurora.org> | 2015-10-23 11:43:19 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-11-30 19:01:18 -0800 |
commit | e4b41241cbdb336de6dd1ee44fbcddc641eb02a7 (patch) | |
tree | a96fd5f0ef9646ef93c3455b863e77596c804ba0 | |
parent | 3745361e71a93f6f304c1392103f59b498cf5833 (diff) | |
download | frameworks_av-e4b41241cbdb336de6dd1ee44fbcddc641eb02a7.zip frameworks_av-e4b41241cbdb336de6dd1ee44fbcddc641eb02a7.tar.gz frameworks_av-e4b41241cbdb336de6dd1ee44fbcddc641eb02a7.tar.bz2 |
GenericSource: Hold an additional reference to dataSource.
mDataSource can be deleted by client thread while GenericSource
looper is accessing dataSource in sniff functions, which can
lead to race condition. Add local sp<> to hold an additional
reference to dataSource.
Change-Id: I9e51f75f3c2bd703e381230dd93cb4d3f6621dab
CRs-Fixed: 923729
-rw-r--r-- | media/libmediaplayerservice/nuplayer/GenericSource.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp index 3485dd5..1e8c2d3 100644 --- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp +++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp @@ -156,7 +156,12 @@ status_t NuPlayer::GenericSource::initFromDataSource() { return UNKNOWN_ERROR; } } else if (mIsStreaming) { - if (!mDataSource->sniff(&mimeType, &confidence, &dummy)) { + sp<DataSource> dataSource; + { + Mutex::Autolock _l(mSourceLock); + dataSource = mDataSource; + } + if (!dataSource->sniff(&mimeType, &confidence, &dummy)) { return UNKNOWN_ERROR; } isWidevineStreaming = !strcasecmp( |