fix a race in SF buffer management
also remove some unused code. Change-Id: Iae2c3309b7a08055f3e13a5b866c5c084993e352
This commit is contained in:
parent
404860ee66
commit
0e7f4292c7
|
@ -151,7 +151,6 @@ public:
|
||||||
~SharedBufferBase();
|
~SharedBufferBase();
|
||||||
status_t getStatus() const;
|
status_t getStatus() const;
|
||||||
int32_t getIdentity() const;
|
int32_t getIdentity() const;
|
||||||
size_t getFrontBuffer() const;
|
|
||||||
String8 dump(char const* prefix) const;
|
String8 dump(char const* prefix) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -226,6 +225,11 @@ private:
|
||||||
inline ssize_t operator()();
|
inline ssize_t operator()();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DequeueUpdate : public UpdateBase {
|
||||||
|
inline DequeueUpdate(SharedBufferBase* sbb);
|
||||||
|
inline ssize_t operator()();
|
||||||
|
};
|
||||||
|
|
||||||
struct UndoDequeueUpdate : public UpdateBase {
|
struct UndoDequeueUpdate : public UpdateBase {
|
||||||
inline UndoDequeueUpdate(SharedBufferBase* sbb);
|
inline UndoDequeueUpdate(SharedBufferBase* sbb);
|
||||||
inline ssize_t operator()();
|
inline ssize_t operator()();
|
||||||
|
|
|
@ -191,12 +191,6 @@ int32_t SharedBufferBase::getIdentity() const
|
||||||
return stack.identity;
|
return stack.identity;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t SharedBufferBase::getFrontBuffer() const
|
|
||||||
{
|
|
||||||
SharedBufferStack& stack( *mSharedStack );
|
|
||||||
return size_t( stack.head );
|
|
||||||
}
|
|
||||||
|
|
||||||
String8 SharedBufferBase::dump(char const* prefix) const
|
String8 SharedBufferBase::dump(char const* prefix) const
|
||||||
{
|
{
|
||||||
const size_t SIZE = 1024;
|
const size_t SIZE = 1024;
|
||||||
|
@ -281,6 +275,16 @@ ssize_t SharedBufferClient::QueueUpdate::operator()() {
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SharedBufferClient::DequeueUpdate::DequeueUpdate(SharedBufferBase* sbb)
|
||||||
|
: UpdateBase(sbb) {
|
||||||
|
}
|
||||||
|
ssize_t SharedBufferClient::DequeueUpdate::operator()() {
|
||||||
|
if (android_atomic_dec(&stack.available) == 0) {
|
||||||
|
LOGW("dequeue probably called from multiple threads!");
|
||||||
|
}
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
SharedBufferClient::UndoDequeueUpdate::UndoDequeueUpdate(SharedBufferBase* sbb)
|
SharedBufferClient::UndoDequeueUpdate::UndoDequeueUpdate(SharedBufferBase* sbb)
|
||||||
: UpdateBase(sbb) {
|
: UpdateBase(sbb) {
|
||||||
}
|
}
|
||||||
|
@ -388,12 +392,8 @@ ssize_t SharedBufferClient::dequeue()
|
||||||
if (err != NO_ERROR)
|
if (err != NO_ERROR)
|
||||||
return ssize_t(err);
|
return ssize_t(err);
|
||||||
|
|
||||||
// NOTE: 'stack.available' is part of the conditions, however
|
DequeueUpdate update(this);
|
||||||
// decrementing it, never changes any conditions, so we don't need
|
updateCondition( update );
|
||||||
// to do this as part of an update.
|
|
||||||
if (android_atomic_dec(&stack.available) == 0) {
|
|
||||||
LOGW("dequeue probably called from multiple threads!");
|
|
||||||
}
|
|
||||||
|
|
||||||
undoDequeueTail = tail;
|
undoDequeueTail = tail;
|
||||||
int dequeued = stack.index[tail];
|
int dequeued = stack.index[tail];
|
||||||
|
|
Loading…
Reference in New Issue