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