diff options
author | Devin Moore <devinmoore@google.com> | 2024-01-22 20:16:01 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2024-01-22 20:16:01 +0000 |
commit | 3aa16b08350ecd2ecc8fe4db0cf11fc973c02d84 (patch) | |
tree | b7990f9b0411a20b8df8d53372408ba8cdce57a1 | |
parent | e744bc9244e3467463f58db2c0e1b4005792d7d4 (diff) | |
parent | 38963310ad5789b625ca0bca9f9c2c8e24666651 (diff) | |
download | libfmq-3aa16b08350ecd2ecc8fe4db0cf11fc973c02d84.tar.gz |
Use the values of the ptrs that we check am: 38963310ad
Original change: https://android-review.googlesource.com/c/platform/system/libfmq/+/2922067
Change-Id: I5429c692a99c41f245efa8705edd57436e359fee
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | include/fmq/MessageQueueBase.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/include/fmq/MessageQueueBase.h b/include/fmq/MessageQueueBase.h index ee80a45..1b71abf 100644 --- a/include/fmq/MessageQueueBase.h +++ b/include/fmq/MessageQueueBase.h @@ -1047,13 +1047,15 @@ bool MessageQueueBase<MQDescriptorType, T, flavor>::readBlocking(T* data, size_t template <template <typename, MQFlavor> typename MQDescriptorType, typename T, MQFlavor flavor> size_t MessageQueueBase<MQDescriptorType, T, flavor>::availableToWriteBytes() const { - if (mDesc->getSize() < availableToReadBytes()) { + size_t queueSizeBytes = mDesc->getSize(); + size_t availableBytes = availableToReadBytes(); + if (queueSizeBytes < availableBytes) { hardware::details::logError( "The write or read pointer has become corrupted. Reading from the queue is no " "longer possible."); return 0; } - return mDesc->getSize() - availableToReadBytes(); + return queueSizeBytes - availableBytes; } template <template <typename, MQFlavor> typename MQDescriptorType, typename T, MQFlavor flavor> @@ -1141,13 +1143,15 @@ size_t MessageQueueBase<MQDescriptorType, T, flavor>::availableToReadBytes() con * hence requires a memory_order_acquired load for both mReadPtr and * mWritePtr. */ - if (mWritePtr->load(std::memory_order_acquire) < mReadPtr->load(std::memory_order_acquire)) { + uint64_t writePtr = mWritePtr->load(std::memory_order_acquire); + uint64_t readPtr = mReadPtr->load(std::memory_order_acquire); + if (writePtr < readPtr) { hardware::details::logError( "The write or read pointer has become corrupted. Reading from the queue is no " "longer possible."); return 0; } - return mWritePtr->load(std::memory_order_acquire) - mReadPtr->load(std::memory_order_acquire); + return writePtr - readPtr; } template <template <typename, MQFlavor> typename MQDescriptorType, typename T, MQFlavor flavor> |