am e5cf7f2b: Merge "Fix race in buffer ref counting." into honeycomb
* commit 'e5cf7f2bc51913d87bf97c8a1885f736edc5f0bc': Fix race in buffer ref counting.
This commit is contained in:
@@ -26,17 +26,10 @@
|
|||||||
#include <media/stagefright/MetaData.h>
|
#include <media/stagefright/MetaData.h>
|
||||||
|
|
||||||
#include <ui/GraphicBuffer.h>
|
#include <ui/GraphicBuffer.h>
|
||||||
|
#include <sys/atomics.h>
|
||||||
|
|
||||||
namespace android {
|
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)
|
MediaBuffer::MediaBuffer(void *data, size_t size)
|
||||||
: mObserver(NULL),
|
: mObserver(NULL),
|
||||||
mNextBuffer(NULL),
|
mNextBuffer(NULL),
|
||||||
@@ -84,7 +77,7 @@ void MediaBuffer::release() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int prevCount = atomic_add(&mRefCount, -1);
|
int prevCount = __atomic_dec(&mRefCount);
|
||||||
if (prevCount == 1) {
|
if (prevCount == 1) {
|
||||||
if (mObserver == NULL) {
|
if (mObserver == NULL) {
|
||||||
delete this;
|
delete this;
|
||||||
@@ -104,7 +97,7 @@ void MediaBuffer::claim() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MediaBuffer::add_ref() {
|
void MediaBuffer::add_ref() {
|
||||||
atomic_add(&mRefCount, 1);
|
(void) __atomic_inc(&mRefCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *MediaBuffer::data() const {
|
void *MediaBuffer::data() const {
|
||||||
|
|||||||
Reference in New Issue
Block a user