Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e301545a authored by Jeff Tinker's avatar Jeff Tinker Committed by Android (Google) Code Review
Browse files

Revert "Fix for b/4165024: Serious Memory leak when playing a WV protected streaming video."

This reverts commit d63d947d406977c7c307f69369908b4342c98ef3
parent 50255a92
Loading
Loading
Loading
Loading
+13 −23
Original line number Diff line number Diff line
@@ -33,25 +33,26 @@

#include <utils/Errors.h>

/* The extractor lifetime is short - just long enough to get
 * the media sources constructed - so the shared lib needs to remain open
 * beyond the lifetime of the extractor.  So keep the handle as a global
 * rather than a member of the extractor
 */
void *gVendorLibHandle = NULL;

namespace android {

Mutex WVMExtractor::sMutex;
uint32_t WVMExtractor::sActiveExtractors = 0;
void *WVMExtractor::sVendorLibHandle = NULL;
static Mutex gWVMutex;

WVMExtractor::WVMExtractor(const sp<DataSource> &source)
    : mDataSource(source) {
    {
        Mutex::Autolock autoLock(sMutex);

        if (sVendorLibHandle == NULL) {
            CHECK(sActiveExtractors == 0);
            sVendorLibHandle = dlopen("libwvm.so", RTLD_NOW);
        Mutex::Autolock autoLock(gWVMutex);
        if (gVendorLibHandle == NULL) {
            gVendorLibHandle = dlopen("libwvm.so", RTLD_NOW);
        }

        sActiveExtractors++;

        if (sVendorLibHandle == NULL) {
        if (gVendorLibHandle == NULL) {
            LOGE("Failed to open libwvm.so");
            return;
        }
@@ -59,7 +60,7 @@ WVMExtractor::WVMExtractor(const sp<DataSource> &source)

    typedef WVMLoadableExtractor *(*GetInstanceFunc)(sp<DataSource>);
    GetInstanceFunc getInstanceFunc =
        (GetInstanceFunc) dlsym(sVendorLibHandle,
        (GetInstanceFunc) dlsym(gVendorLibHandle,
                "_ZN7android11GetInstanceENS_2spINS_10DataSourceEEE");

    if (getInstanceFunc) {
@@ -71,17 +72,6 @@ WVMExtractor::WVMExtractor(const sp<DataSource> &source)
}

WVMExtractor::~WVMExtractor() {
    Mutex::Autolock autoLock(sMutex);

    CHECK(sActiveExtractors > 0);
    sActiveExtractors--;

    // Close lib after last use
    if (sActiveExtractors == 0) {
        if (sVendorLibHandle != NULL)
            dlclose(sVendorLibHandle);
        sVendorLibHandle = NULL;
    }
}

size_t WVMExtractor::countTracks() {
+0 −5
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@

#define WVM_EXTRACTOR_H_

#include <media/stagefright/DataSource.h>
#include <media/stagefright/MediaExtractor.h>
#include <utils/Errors.h>

@@ -68,10 +67,6 @@ private:

    WVMExtractor(const WVMExtractor &);
    WVMExtractor &operator=(const WVMExtractor &);

    static Mutex sMutex;
    static uint32_t sActiveExtractors;
    static void *sVendorLibHandle;
};

}  // namespace android