summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevin Moore <devinmoore@google.com>2024-01-22 20:16:01 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-01-22 20:16:01 +0000
commit3aa16b08350ecd2ecc8fe4db0cf11fc973c02d84 (patch)
treeb7990f9b0411a20b8df8d53372408ba8cdce57a1
parente744bc9244e3467463f58db2c0e1b4005792d7d4 (diff)
parent38963310ad5789b625ca0bca9f9c2c8e24666651 (diff)
downloadlibfmq-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.h12
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>