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

Commit e343546d authored by Prabir Pradhan's avatar Prabir Pradhan
Browse files

Remove RefBase from NativeInputManager

Since we only expect NativeInputManager to be called once for the
lifetime of system_server, we create it using "new" and use the pointer
as a leash without ever deallocating or destroying it.

Bug: 258710091
Test: boot
Change-Id: I7be01735b663607b6f4e30147cd4ff80c9d951c5
parent 2d4746d1
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -260,8 +260,7 @@ static std::string getStringElementFromJavaArray(JNIEnv* env, jobjectArray array

// --- NativeInputManager ---

class NativeInputManager : public virtual RefBase,
    public virtual InputReaderPolicyInterface,
class NativeInputManager : public virtual InputReaderPolicyInterface,
                           public virtual InputDispatcherPolicyInterface,
                           public virtual PointerControllerPolicyInterface {
protected:
@@ -1516,8 +1515,14 @@ static jlong nativeInit(JNIEnv* env, jclass /* clazz */, jobject serviceObj,
        return 0;
    }

    NativeInputManager* im = new NativeInputManager(serviceObj, messageQueue->getLooper());
    im->incStrong(0);
    static std::once_flag nativeInitialize;
    NativeInputManager* im = nullptr;
    std::call_once(nativeInitialize, [&]() {
        // Create the NativeInputManager, which should not be destroyed or deallocated for the
        // lifetime of the process.
        im = new NativeInputManager(serviceObj, messageQueue->getLooper());
    });
    LOG_ALWAYS_FATAL_IF(im == nullptr, "NativeInputManager was already initialized.");
    return reinterpret_cast<jlong>(im);
}