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

Commit 1a37b731 authored by Patrick Williams's avatar Patrick Williams
Browse files

Fix transactionCallbackThunk lifetime issue

TestBLASTBufferQueue overrides transactionCallback but BLASTBufferQueue::transactionCallback can trigger the destruction of BLASTBufferQueue, causing native crashes. This CL fixes the issue by moving the decStrong call after transactionCallback has completed.

Bug: 294133380
Flag: EXEMPT bugfix
Test: BLASTBufferQueueTest
Change-Id: Ia2344ed6d14e89026f464b32c95c76b3a96a19d0
parent 04e70e42
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -356,8 +356,9 @@ static void transactionCallbackThunk(void* context, nsecs_t latchTime,
    if (context == nullptr) {
        return;
    }
    sp<BLASTBufferQueue> bq = static_cast<BLASTBufferQueue*>(context);
    auto bq = static_cast<BLASTBufferQueue*>(context);
    bq->transactionCallback(latchTime, presentFence, stats);
    bq->decStrong((void*)transactionCallbackThunk);
}

void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence>& /*presentFence*/,
@@ -413,8 +414,6 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence
            BQA_LOGE("No matching SurfaceControls found: mSurfaceControlsWithPendingCallback was "
                     "empty.");
        }

        decStrong((void*)transactionCallbackThunk);
    }
}