diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index b727ef51e..26694221a 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -632,7 +632,9 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int int corner_bl = (type & CORNER_BOTTOM_LEFT) ? 1 : 0; int corner_br = (type & CORNER_BOTTOM_RIGHT) ? 1 : 0; -#ifndef USE_NEVIS_GXA +#ifdef USE_NEVIS_GXA + OpenThreads::ScopedLock m_lock(mutex); +#else int swidth = stride / sizeof(fb_pixel_t); fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); #endif @@ -763,6 +765,7 @@ void CFrameBuffer::paintVLine(int x, int ya, int yb, const fb_pixel_t col) return; #ifdef USE_NEVIS_GXA + OpenThreads::ScopedLock m_lock(mutex); /* draw a single vertical line from point x/ya to x/yb */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -788,6 +791,7 @@ void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) return; #ifdef USE_NEVIS_GXA + OpenThreads::ScopedLock m_lock(mutex); /* draw a single vertical line from point x/y with hight dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -811,6 +815,7 @@ void CFrameBuffer::paintHLine(int xa, int xb, int y, const fb_pixel_t col) return; #ifdef USE_NEVIS_GXA + OpenThreads::ScopedLock m_lock(mutex); /* draw a single horizontal line from point xa/y to xb/y */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -835,6 +840,7 @@ void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) return; #ifdef USE_NEVIS_GXA + OpenThreads::ScopedLock m_lock(mutex); /* draw a single horizontal line from point x/y with width dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -1698,6 +1704,7 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 //printf("CFrameBuffer::blit2FB: data %x Kva %x\n", (int) fbbuff, (int) uKva); if(uKva != NULL) { + OpenThreads::ScopedLock m_lock(mutex); cmd = GXA_CMD_BLT | GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(1) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(3); _write_gxa(gxa_base, GXA_BMP1_TYPE_REG, (3 << 16) | width); diff --git a/src/driver/framebuffer.h b/src/driver/framebuffer.h index e971dabc1..9028b9d53 100644 --- a/src/driver/framebuffer.h +++ b/src/driver/framebuffer.h @@ -32,6 +32,8 @@ #include #include +#include +#include #define fb_pixel_t uint32_t @@ -57,6 +59,7 @@ class CFrameBuffer private: CFrameBuffer(); + OpenThreads::Mutex mutex; struct rgbData {