diff options
| author | 2011-01-25 00:23:41 -0800 | |
|---|---|---|
| committer | 2011-01-25 00:23:41 -0800 | |
| commit | 887a834c4737bed055bacbc91cc0dd42bd25546c (patch) | |
| tree | d37cac30c8e0b18742beda1f5846a913009fd4dd /libs/rs | |
| parent | a2edecfe75134ba8bb7258ef30941ef3e9024de4 (diff) | |
| parent | fcecc244a7f5a8c744e778970b1722a70472349b (diff) | |
Merge "Attempt to fix 3333866 Missing memory barrier when the non-locking past path is hit." into honeycomb
Diffstat (limited to 'libs/rs')
| -rw-r--r-- | libs/rs/rsLocklessFifo.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libs/rs/rsLocklessFifo.cpp b/libs/rs/rsLocklessFifo.cpp index eb2af1cda757..3f8854330acf 100644 --- a/libs/rs/rsLocklessFifo.cpp +++ b/libs/rs/rsLocklessFifo.cpp @@ -76,7 +76,8 @@ uint32_t LocklessCommandFifo::getFreeSpace() const { } bool LocklessCommandFifo::isEmpty() const { - return mPut == mGet; + uint32_t p = android_atomic_acquire_load((int32_t *)&mPut); + return ((uint8_t *)p) == mGet; } @@ -155,7 +156,9 @@ const void * LocklessCommandFifo::get(uint32_t *command, uint32_t *bytesData) { void LocklessCommandFifo::next() { uint32_t bytes = reinterpret_cast<const uint16_t *>(mGet)[1]; - mGet += ((bytes + 3) & ~3) + 4; + + android_atomic_add(((bytes + 3) & ~3) + 4, (int32_t *)&mGet); + //mGet += ((bytes + 3) & ~3) + 4; if (isEmpty()) { mSignalToControl.set(); } |