From fd7ec80f3d0e30c8df61b86951d926ab9c8c6d25 Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Fri, 24 Aug 2012 17:10:17 -0700 Subject: Fix deadlock I wanted to save some space, and ended up with a deadlock. This change basically restores setDataSource(fd, offset, size) to the way it was before I added the new setDataSource(DataSource) method, instead of calling through to it. Change-Id: Iacf4627c8745369fa84b467530189a9f64f8726b --- media/libstagefright/NuMediaExtractor.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp index bf833dc..404fa94 100644 --- a/media/libstagefright/NuMediaExtractor.cpp +++ b/media/libstagefright/NuMediaExtractor.cpp @@ -126,6 +126,7 @@ status_t NuMediaExtractor::setDataSource( } status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) { + Mutex::Autolock autoLock(mLock); if (mImpl != NULL) { @@ -134,7 +135,22 @@ status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) { sp fileSource = new FileSource(dup(fd), offset, size); - return setDataSource(fileSource); + status_t err = fileSource->initCheck(); + if (err != OK) { + return err; + } + + mImpl = MediaExtractor::Create(fileSource); + + if (mImpl == NULL) { + return ERROR_UNSUPPORTED; + } + + mDataSource = fileSource; + + updateDurationAndBitrate(); + + return OK; } status_t NuMediaExtractor::setDataSource(const sp &source) { -- cgit v1.1