summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/GenericSource.cpp
diff options
context:
space:
mode:
authorShivaprasad Hongal <shongal@codeaurora.org>2015-10-23 11:43:19 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-10-26 19:24:52 -0700
commit1dafcd15418346edb5b0fd1a925a29ea90b5c3c2 (patch)
tree0158f557b618bb263bc9fdc1768fa7e80707b4b1 /media/libmediaplayerservice/nuplayer/GenericSource.cpp
parentbbb9b1da50edbbed193b342be19b62e232254f27 (diff)
downloadframeworks_av-1dafcd15418346edb5b0fd1a925a29ea90b5c3c2.zip
frameworks_av-1dafcd15418346edb5b0fd1a925a29ea90b5c3c2.tar.gz
frameworks_av-1dafcd15418346edb5b0fd1a925a29ea90b5c3c2.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
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/GenericSource.cpp')
-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 6406971..b9cb1ca 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
@@ -154,7 +154,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(