summaryrefslogtreecommitdiffstats
path: root/libgralloc/framebuffer.cpp
diff options
context:
space:
mode:
authorNaseer Ahmed <naseer@codeaurora.org>2012-07-13 07:16:20 -0700
committerBrian Muramatsu <btmura@google.com>2012-07-23 12:35:29 -0700
commit8831816879bf525f5a752e9911fb85fa88b7d493 (patch)
tree3a559574001ef2c3c8ab9f8a31c0bab9054d27e8 /libgralloc/framebuffer.cpp
parenta4f41fae325499e6dcde7b6be4984bd9c28d96d3 (diff)
downloadandroid_hardware_qcom_display-8831816879bf525f5a752e9911fb85fa88b7d493.tar.gz
android_hardware_qcom_display-8831816879bf525f5a752e9911fb85fa88b7d493.tar.bz2
android_hardware_qcom_display-8831816879bf525f5a752e9911fb85fa88b7d493.zip
framebuffer: Fix locking
The gralloc locking did not lock the framebuffer. Use genlock to lock the framebuffers. Change-Id: Ie8be6f7950f6df06a2293c3df863e19cd5386479
Diffstat (limited to 'libgralloc/framebuffer.cpp')
-rw-r--r--libgralloc/framebuffer.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/libgralloc/framebuffer.cpp b/libgralloc/framebuffer.cpp
index 97295a35d..837c53a45 100644
--- a/libgralloc/framebuffer.cpp
+++ b/libgralloc/framebuffer.cpp
@@ -39,6 +39,7 @@
#include "gralloc_priv.h"
#include "fb_priv.h"
#include "gr.h"
+#include <genlock.h>
#include <cutils/properties.h>
#include <profiler.h>
@@ -502,20 +503,19 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
if (private_handle_t::validate(buffer) < 0)
return -EINVAL;
- fb_context_t* ctx = (fb_context_t*)dev;
+ fb_context_t* ctx = (fb_context_t*) dev;
+
+ private_handle_t *hnd = static_cast<private_handle_t*>
+ (const_cast<native_handle_t*>(buffer));
- private_handle_t const* hnd =
- reinterpret_cast<private_handle_t const*>(buffer);
private_module_t* m =
reinterpret_cast<private_module_t*>(dev->common.module);
if (hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER) {
- m->base.lock(&m->base, buffer,
- PRIV_USAGE_LOCKED_FOR_POST,
- 0, 0, m->info.xres, m->info.yres, NULL);
+ genlock_lock_buffer(hnd, GENLOCK_READ_LOCK, GENLOCK_MAX_TIMEOUT);
if (m->currentBuffer) {
- m->base.unlock(&m->base, m->currentBuffer);
+ genlock_unlock_buffer(m->currentBuffer);
m->currentBuffer = 0;
}
@@ -524,11 +524,11 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
m->info.yoffset = offset / m->finfo.line_length;
if (ioctl(m->framebuffer->fd, FBIOPUT_VSCREENINFO, &m->info) == -1) {
ALOGE("FBIOPUT_VSCREENINFO failed");
- m->base.unlock(&m->base, buffer);
+ genlock_unlock_buffer(hnd);
return -errno;
}
CALC_FPS();
- m->currentBuffer = buffer;
+ m->currentBuffer = hnd;
}
return 0;
}