summaryrefslogtreecommitdiffstats
path: root/x11vnc/rates.c
diff options
context:
space:
mode:
authorrunge <runge@karlrunge.com>2009-05-21 10:57:03 -0400
committerrunge <runge@karlrunge.com>2009-05-21 10:57:03 -0400
commit94d058b35f075cec2d6e8b6e37ee1a94086ea3f8 (patch)
tree6cec0620ab70b5db6b33645dbcac1071f3c7a556 /x11vnc/rates.c
parent804335f9d296440bb708ca844f5d89b58b50b0c6 (diff)
downloadlibvncserver-94d058b35f075cec2d6e8b6e37ee1a94086ea3f8.zip
libvncserver-94d058b35f075cec2d6e8b6e37ee1a94086ea3f8.tar.gz
Thread safety. Fix -clip -in -rawfb. Try to avoid Xorg stuck
key bug.
Diffstat (limited to 'x11vnc/rates.c')
-rw-r--r--x11vnc/rates.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/x11vnc/rates.c b/x11vnc/rates.c
index 285b644..1424604 100644
--- a/x11vnc/rates.c
+++ b/x11vnc/rates.c
@@ -455,12 +455,17 @@ if (db) fprintf(stderr, "%d client num rects req: %d mod: %d cbs: %d "
if (OUCH && ouch_db) fprintf(stderr, "***OUCH-A\n");
if (OUCH) continue;
+ if (use_threads) LOCK(cl->updateMutex);
+
if (sraRgnCountRects(cl->modifiedRegion)) {
rfbPE(1000);
if (OUCH && ouch_db) fprintf(stderr, "***OUCH-B\n");
+ if (use_threads) UNLOCK(cl->updateMutex);
if (OUCH) continue;
}
+ if (use_threads) UNLOCK(cl->updateMutex);
+
defer = screen->deferUpdateTime;
httpdir = screen->httpDir;
screen->deferUpdateTime = 0;
@@ -486,8 +491,13 @@ if (db) fprintf(stderr, "%d client num rects req: %d mod: %d cbs: %d "
if (OUCH && ouch_db) fprintf(stderr, "***OUCH-C1\n");
if (OUCH) break;
+ if (use_threads) LOCK(cl->updateMutex);
+
req0 = sraRgnCountRects(cl->requestedRegion);
mod0 = sraRgnCountRects(cl->modifiedRegion);
+
+ if (use_threads) UNLOCK(cl->updateMutex);
+
if (use_threads) {
usleep(1000);
} else {
@@ -506,9 +516,13 @@ if (db) fprintf(stderr, "%d client num rects req: %d mod: %d cbs: %d "
if (OUCH && ouch_db) fprintf(stderr, "***OUCH-C2\n");
if (OUCH) break;
+ if (use_threads) LOCK(cl->updateMutex);
+
req1 = sraRgnCountRects(cl->requestedRegion);
mod1 = sraRgnCountRects(cl->modifiedRegion);
+ if (use_threads) UNLOCK(cl->updateMutex);
+
if (db) fprintf(stderr, "dt2 calc: num rects req: %d/%d mod: %d/%d "
"fbu-sent: %d dt: %.4f dt2: %.4f tm: %.4f\n",
req0, req1, mod0, mod1,
@@ -558,10 +572,12 @@ if (db) fprintf(stderr, "dt2 calc: num rects req: %d/%d mod: %d/%d "
while (1) {
int req0, req1, mod0, mod1;
- req0 = sraRgnCountRects(
- cl->requestedRegion);
- mod0 = sraRgnCountRects(
- cl->modifiedRegion);
+ if (use_threads) LOCK(cl->updateMutex);
+
+ req0 = sraRgnCountRects(cl->requestedRegion);
+ mod0 = sraRgnCountRects(cl->modifiedRegion);
+
+ if (use_threads) UNLOCK(cl->updateMutex);
if (i == 0) {
rfbPE(0);
@@ -582,11 +598,13 @@ if (db) fprintf(stderr, "dt2 calc: num rects req: %d/%d mod: %d/%d "
if (dt3 > spin_lat_max) {
break;
}
- req1 = sraRgnCountRects(
- cl->requestedRegion);
- mod1 = sraRgnCountRects(
- cl->modifiedRegion);
+ if (use_threads) LOCK(cl->updateMutex);
+
+ req1 = sraRgnCountRects(cl->requestedRegion);
+ mod1 = sraRgnCountRects(cl->modifiedRegion);
+
+ if (use_threads) UNLOCK(cl->updateMutex);
if (db) fprintf(stderr, "dt3 calc: num rects req: %d/%d mod: %d/%d "
"fbu-sent: %d dt: %.4f dt3: %.4f tm: %.4f\n",
OpenPOWER on IntegriCloud