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

Commit 4e26bc68 authored by Glenn Kasten's avatar Glenn Kasten
Browse files

Fix race in buffer ref counting.

Change-Id: Id47c30469c3e3ec293ed2ef574a191275b5044d6
parent 1a6c5b64
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -26,17 +26,10 @@
#include <media/stagefright/MetaData.h>

#include <ui/GraphicBuffer.h>
#include <sys/atomics.h>

namespace android {

// XXX make this truly atomic.
static int atomic_add(int *value, int delta) {
    int prev_value = *value;
    *value += delta;

    return prev_value;
}

MediaBuffer::MediaBuffer(void *data, size_t size)
    : mObserver(NULL),
      mNextBuffer(NULL),
@@ -84,7 +77,7 @@ void MediaBuffer::release() {
        return;
    }

    int prevCount = atomic_add(&mRefCount, -1);
    int prevCount = __atomic_dec(&mRefCount);
    if (prevCount == 1) {
        if (mObserver == NULL) {
            delete this;
@@ -104,7 +97,7 @@ void MediaBuffer::claim() {
}

void MediaBuffer::add_ref() {
    atomic_add(&mRefCount, 1);
    (void) __atomic_inc(&mRefCount);
}

void *MediaBuffer::data() const {