Parcourir la source

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.
tags/v1.6.90
Pierre Ossman il y a 8 ans
Parent
révision
0b5a06b8ca
2 fichiers modifiés avec 7 ajouts et 0 suppressions
  1. 4
    0
      vncviewer/PlatformPixelBuffer.cxx
  2. 3
    0
      vncviewer/PlatformPixelBuffer.h

+ 4
- 0
vncviewer/PlatformPixelBuffer.cxx Voir le fichier

@@ -28,15 +28,19 @@ PlatformPixelBuffer::PlatformPixelBuffer(const rfb::PixelFormat& pf,
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;
}

+ 3
- 0
vncviewer/PlatformPixelBuffer.h Voir le fichier

@@ -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 @@ public:
rfb::Rect getDamage(void);

protected:
os::Mutex mutex;
rfb::Region damage;
};


Chargement…
Annuler
Enregistrer