Protect PlatformPixelBuffer from simultaneous access
The damage tracking region needs to be protected from multiple
threads accessing it at once. The rest should be fine though.
diff --git a/vncviewer/PlatformPixelBuffer.cxx b/vncviewer/PlatformPixelBuffer.cxx
index 5bd50d2..522bad3 100644
--- a/vncviewer/PlatformPixelBuffer.cxx
+++ b/vncviewer/PlatformPixelBuffer.cxx
@@ -28,15 +28,19 @@
void PlatformPixelBuffer::commitBufferRW(const rfb::Rect& r)
{
FullFramePixelBuffer::commitBufferRW(r);
+ mutex.lock();
damage.assign_union(rfb::Region(r));
+ mutex.unlock();
}
rfb::Rect PlatformPixelBuffer::getDamage(void)
{
rfb::Rect r;
+ mutex.lock();
r = damage.get_bounding_rect();
damage.clear();
+ mutex.unlock();
return r;
}
diff --git a/vncviewer/PlatformPixelBuffer.h b/vncviewer/PlatformPixelBuffer.h
index 21b93be..795273a 100644
--- a/vncviewer/PlatformPixelBuffer.h
+++ b/vncviewer/PlatformPixelBuffer.h
@@ -19,6 +19,8 @@
#ifndef __PLATFORMPIXELBUFFER_H__
#define __PLATFORMPIXELBUFFER_H__
+#include <os/Mutex.h>
+
#include <rfb/PixelBuffer.h>
#include <rfb/Region.h>
@@ -33,6 +35,7 @@
rfb::Rect getDamage(void);
protected:
+ os::Mutex mutex;
rfb::Region damage;
};