summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShivaprasad Hongal <shongal@codeaurora.org>2015-10-23 11:43:19 -0700
committerSteve Kondik <steve@cyngn.com>2015-11-30 19:01:18 -0800
commite4b41241cbdb336de6dd1ee44fbcddc641eb02a7 (patch)
treea96fd5f0ef9646ef93c3455b863e77596c804ba0
parent3745361e71a93f6f304c1392103f59b498cf5833 (diff)
downloadframeworks_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.cpp7
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(