summaryrefslogtreecommitdiff
path: root/libs/ui/SharedBufferStack.cpp
diff options
context:
space:
mode:
author Android (Google) Code Review <android-gerrit@google.com> 2009-09-10 22:59:02 -0400
committer Android (Google) Code Review <android-gerrit@google.com> 2009-09-10 22:59:02 -0400
commit12d2cdcdb0eed759b0e7738cbdefaa726a71930b (patch)
tree65081cdef04e9829f03a39b35e1a25dd77b10e3f /libs/ui/SharedBufferStack.cpp
parent8905daa06875a3f052c1eff5b0fbd14ab297cff7 (diff)
parent436c627ca4228284caf363f0cb35947e58b841b9 (diff)
Merge change 24642 into eclair
* changes: make sure conditions will return when the status of a surface is not NO_ERROR
Diffstat (limited to 'libs/ui/SharedBufferStack.cpp')
-rw-r--r--libs/ui/SharedBufferStack.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/libs/ui/SharedBufferStack.cpp b/libs/ui/SharedBufferStack.cpp
index 5995af5de755..73fb582f9c3e 100644
--- a/libs/ui/SharedBufferStack.cpp
+++ b/libs/ui/SharedBufferStack.cpp
@@ -64,7 +64,7 @@ status_t SharedClient::setIdentity(size_t token, uint32_t identity) {
SharedBufferStack::SharedBufferStack()
- : inUse(-1), identity(-1), status(NO_ERROR)
+ : inUse(-1), status(NO_ERROR), identity(-1)
{
}
@@ -231,6 +231,16 @@ ssize_t SharedBufferServer::RetireUpdate::operator()() {
return head;
}
+SharedBufferServer::StatusUpdate::StatusUpdate(
+ SharedBufferBase* sbb, status_t status)
+ : UpdateBase(sbb), status(status) {
+}
+
+ssize_t SharedBufferServer::StatusUpdate::operator()() {
+ android_atomic_write(status, &stack.status);
+ return NO_ERROR;
+}
+
// ============================================================================
SharedBufferClient::SharedBufferClient(SharedClient* sharedClient,
@@ -327,6 +337,12 @@ status_t SharedBufferServer::unlock(int buffer)
return err;
}
+void SharedBufferServer::setStatus(status_t status)
+{
+ StatusUpdate update(this, status);
+ updateCondition( update );
+}
+
status_t SharedBufferServer::reallocate()
{
SharedBufferStack& stack( *mSharedStack );