OSDN Git Service

Fix deadlock
authorMarco Nelissen <marcone@google.com>
Sat, 25 Aug 2012 00:10:17 +0000 (17:10 -0700)
committerMarco Nelissen <marcone@google.com>
Sat, 25 Aug 2012 00:12:20 +0000 (17:12 -0700)
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

index bf833dc..404fa94 100644 (file)
@@ -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> 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<DataSource> &source) {