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

Commit bbe9cb4f authored by Iliyan Malchev's avatar Iliyan Malchev
Browse files

libstagefright: add destroyOMXPlugin and use C linkage for symbols



Add a destroyOMXPlugin() to complemenet createOMXPlugin().  Since the latter is
an opaque call into a library, it is not safe to assume that the object thus
returned may be destroyed by calling delete.  This patch will call
destroyOMXPlugin() in libstagefrighthw.so, if the symbol is defined there.
Otherwise, it will default to a delete as before.

Also, prefer C linkage for the symbol names.  Using mangled C++ symbols is not
very safe and makes it hard to grep for those symbols through the code.  We
attempt to locate createOMXPlugin as a C symbol then try it as a mangled C++
one.  We only use C linkage for destroyOMXPlugin since this symbol is new.

Change-Id: Ied23c910486856a0f18056df049c871234797c5c
Signed-off-by: default avatarIliyan Malchev <malchev@google.com>
parent f7b3e2e2
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -57,6 +57,9 @@ void OMXMaster::addPlugin(const char *libname) {
    typedef OMXPluginBase *(*CreateOMXPluginFunc)();
    CreateOMXPluginFunc createOMXPlugin =
        (CreateOMXPluginFunc)dlsym(
                mVendorLibHandle, "createOMXPlugin");
    if (!createOMXPlugin)
        createOMXPlugin = (CreateOMXPluginFunc)dlsym(
                mVendorLibHandle, "_ZN7android15createOMXPluginEv");

    if (createOMXPlugin) {
@@ -96,10 +99,18 @@ void OMXMaster::addPlugin(OMXPluginBase *plugin) {
void OMXMaster::clearPlugins() {
    Mutex::Autolock autoLock(mLock);

    typedef void (*DestroyOMXPluginFunc)(OMXPluginBase*);
    DestroyOMXPluginFunc destroyOMXPlugin =
        (DestroyOMXPluginFunc)dlsym(
                mVendorLibHandle, "destroyOMXPlugin");

    mPluginByComponentName.clear();

    for (List<OMXPluginBase *>::iterator it = mPlugins.begin();
            it != mPlugins.end(); ++it) {
        if (destroyOMXPlugin)
            destroyOMXPlugin(*it);
        else
            delete *it;
        *it = NULL;
    }