diff options
author | Shivaprasad Hongal <shongal@codeaurora.org> | 2015-10-23 11:43:19 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-10-26 19:24:52 -0700 |
commit | 1dafcd15418346edb5b0fd1a925a29ea90b5c3c2 (patch) | |
tree | 0158f557b618bb263bc9fdc1768fa7e80707b4b1 /media/libmediaplayerservice/nuplayer/GenericSource.cpp | |
parent | bbb9b1da50edbbed193b342be19b62e232254f27 (diff) | |
download | frameworks_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.cpp | 7 |
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( |