diff options
Diffstat (limited to 'java/com/tigervnc/rfb/DecodeManager.java')
-rw-r--r-- | java/com/tigervnc/rfb/DecodeManager.java | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/java/com/tigervnc/rfb/DecodeManager.java b/java/com/tigervnc/rfb/DecodeManager.java index 7e2aedf6..c1557460 100644 --- a/java/com/tigervnc/rfb/DecodeManager.java +++ b/java/com/tigervnc/rfb/DecodeManager.java @@ -43,7 +43,6 @@ public class DecodeManager { producerCond = queueMutex.newCondition(); consumerCond = queueMutex.newCondition(); - //cpuCount = 1; cpuCount = Runtime.getRuntime().availableProcessors(); if (cpuCount == 0) { vlog.error("Unable to determine the number of CPU cores on this system"); @@ -151,12 +150,12 @@ public class DecodeManager { bufferStream.length(), conn.cp, entry.affectedRegion); + queueMutex.lock(); + // The workers add buffers to the end so it's safe to assume // the front is still the same buffer freeBuffers.removeFirst(); - queueMutex.lock(); - workQueue.addLast(entry); // We only put a single entry on the queue so waking a single @@ -249,6 +248,7 @@ public class DecodeManager { public void run() { manager.queueMutex.lock(); + while (!stopRequested) { QueueEntry entry; @@ -257,7 +257,7 @@ public class DecodeManager { if (entry == null) { // Wait and try again try { - manager.consumerCond.await(); + manager.consumerCond.await(); } catch (InterruptedException e) { } continue; } @@ -281,7 +281,7 @@ public class DecodeManager { manager.queueMutex.lock(); // Remove the entry from the queue and give back the memory buffer - manager.freeBuffers.add(entry.bufferStream); + manager.freeBuffers.addLast(entry.bufferStream); manager.workQueue.remove(entry); entry = null; @@ -307,7 +307,7 @@ public class DecodeManager { if (!manager.workQueue.peek().active) return manager.workQueue.peek(); - for (iter = manager.workQueue.iterator(); iter.hasNext();) { + next:for (iter = manager.workQueue.iterator(); iter.hasNext();) { QueueEntry entry; Iterator<QueueEntry> iter2; @@ -317,7 +317,7 @@ public class DecodeManager { // Another thread working on this? if (entry.active) { lockedRegion.assign_union(entry.affectedRegion); - continue; + continue next; } // If this is an ordered decoder then make sure this is the first @@ -326,7 +326,7 @@ public class DecodeManager { for (iter2 = manager.workQueue.iterator(); iter2.hasNext() && iter2 != iter;) { if (entry.encoding == (iter2.next()).encoding) { lockedRegion.assign_union(entry.affectedRegion); - continue; + continue next; } } } @@ -346,14 +346,14 @@ public class DecodeManager { entry2.bufferStream.length(), entry.cp)) lockedRegion.assign_union(entry.affectedRegion); - continue; + continue next; } } // Check overlap with earlier rectangles if (!lockedRegion.intersect(entry.affectedRegion).is_empty()) { lockedRegion.assign_union(entry.affectedRegion); - continue; + continue next; } return entry; |