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

Commit 2b479b7a authored by Wonsik Kim's avatar Wonsik Kim
Browse files

CCodecWatchdog: never destruct once constructed

Bug: 356820254
Test: presubmit
Flag: EXEMPT bugfix
Change-Id: If0c70ef504ee97e51be12324452e3182b56085ae
parent 4dc97674
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -96,11 +96,14 @@ private:

public:
    static sp<CCodecWatchdog> getInstance() {
        static sp<CCodecWatchdog> instance(new CCodecWatchdog);
        static std::once_flag flag;
        // Call Init() only once.
        std::call_once(flag, Init, instance);
        static sp<CCodecWatchdog> sInstance = [] {
            sp<CCodecWatchdog> instance = new CCodecWatchdog;
            // the instance should never get destructed
            instance->incStrong((void *)CCodecWatchdog::getInstance);
            instance->init();
            return instance;
        }();
        return sInstance;
    }

    ~CCodecWatchdog() = default;
@@ -146,11 +149,11 @@ protected:
private:
    CCodecWatchdog() : mLooper(new ALooper) {}

    static void Init(const sp<CCodecWatchdog> &thiz) {
        ALOGV("Init");
        thiz->mLooper->setName("CCodecWatchdog");
        thiz->mLooper->registerHandler(thiz);
        thiz->mLooper->start();
    void init() {
        ALOGV("init");
        mLooper->setName("CCodecWatchdog");
        mLooper->registerHandler(this);
        mLooper->start();
    }

    sp<ALooper> mLooper;