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
This commit is contained in:
Prabir Pradhan
2022-11-10 21:22:39 +00:00
parent 2d4746d1aa
commit e343546d33

View File

@@ -260,10 +260,9 @@ static std::string getStringElementFromJavaArray(JNIEnv* env, jobjectArray array
// --- NativeInputManager ---
class NativeInputManager : public virtual RefBase,
public virtual InputReaderPolicyInterface,
public virtual InputDispatcherPolicyInterface,
public virtual PointerControllerPolicyInterface {
class NativeInputManager : public virtual InputReaderPolicyInterface,
public virtual InputDispatcherPolicyInterface,
public virtual PointerControllerPolicyInterface {
protected:
virtual ~NativeInputManager();
@@ -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);
}