mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:23:37 +00:00
graphics: discard stale data from message queue
Our use of message queues is synchronous. If there are already data in the queue when writeQueue is called, we know they are stale and can be discarded. Bug: 65449888 Test: manual Change-Id: Ie29b8a7386c9733c183a6c3569e3572efa62cbc2
This commit is contained in:
@@ -92,6 +92,23 @@ public:
|
||||
bool writeQueue(bool* outQueueChanged, uint32_t* outCommandLength,
|
||||
hidl_vec<hidl_handle>* outCommandHandles)
|
||||
{
|
||||
// After data are written to the queue, it may not be read by the
|
||||
// remote reader when
|
||||
//
|
||||
// - the writer does not send them (because of other errors)
|
||||
// - the hwbinder transaction fails
|
||||
// - the reader does not read them (because of other errors)
|
||||
//
|
||||
// Discard the stale data here.
|
||||
size_t staleDataSize = mQueue ? mQueue->availableToRead() : 0;
|
||||
if (staleDataSize > 0) {
|
||||
ALOGW("discarding stale data from message queue");
|
||||
CommandQueueType::MemTransaction tx;
|
||||
if (mQueue->beginRead(staleDataSize, &tx)) {
|
||||
mQueue->commitRead(staleDataSize);
|
||||
}
|
||||
}
|
||||
|
||||
// write data to queue, optionally resizing it
|
||||
if (mQueue && (mDataMaxSize <= mQueue->getQuantumCount())) {
|
||||
if (!mQueue->write(mData.get(), mDataWritten)) {
|
||||
|
||||
Reference in New Issue
Block a user