fix a race in SF buffer management

also remove some unused code.

Change-Id: Iae2c3309b7a08055f3e13a5b866c5c084993e352
This commit is contained in:
Mathias Agopian 2010-08-26 17:42:27 -07:00
parent 404860ee66
commit 0e7f4292c7
2 changed files with 17 additions and 13 deletions

View File

@ -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()();

View File

@ -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];