From 26cb79b7bbb504f95cf680f3051676141481a75f Mon Sep 17 00:00:00 2001
From: Doug Lea
Date: Thu, 10 Nov 2011 12:21:49 +0000
Subject: [PATCH] 7107516: LinkedBlockingQueue/Deque.drainTo(Collection, int)
returns 'maxElements' if its value is negative
Reviewed-by: chegar, mduigou, dholmes
---
.../classes/java/util/concurrent/LinkedBlockingDeque.java | 2 ++
.../classes/java/util/concurrent/LinkedBlockingQueue.java | 6 ++++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/jdk/src/share/classes/java/util/concurrent/LinkedBlockingDeque.java b/jdk/src/share/classes/java/util/concurrent/LinkedBlockingDeque.java
index c1978c8e331..60a18d0dba3 100644
--- a/jdk/src/share/classes/java/util/concurrent/LinkedBlockingDeque.java
+++ b/jdk/src/share/classes/java/util/concurrent/LinkedBlockingDeque.java
@@ -742,6 +742,8 @@ public class LinkedBlockingDeque
throw new NullPointerException();
if (c == this)
throw new IllegalArgumentException();
+ if (maxElements <= 0)
+ return 0;
final ReentrantLock lock = this.lock;
lock.lock();
try {
diff --git a/jdk/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java b/jdk/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java
index ae4d43594dd..d1a6d5a0b58 100644
--- a/jdk/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java
+++ b/jdk/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java
@@ -332,7 +332,7 @@ public class LinkedBlockingQueue extends AbstractQueue
// Note: convention in all put/take/etc is to preset local var
// holding count negative to indicate failure unless set.
int c = -1;
- Node node = new Node(e);
+ Node node = new Node(e);
final ReentrantLock putLock = this.putLock;
final AtomicInteger count = this.count;
putLock.lockInterruptibly();
@@ -412,7 +412,7 @@ public class LinkedBlockingQueue extends AbstractQueue
if (count.get() == capacity)
return false;
int c = -1;
- Node node = new Node(e);
+ Node node = new Node(e);
final ReentrantLock putLock = this.putLock;
putLock.lock();
try {
@@ -728,6 +728,8 @@ public class LinkedBlockingQueue extends AbstractQueue
throw new NullPointerException();
if (c == this)
throw new IllegalArgumentException();
+ if (maxElements <= 0)
+ return 0;
boolean signalNotFull = false;
final ReentrantLock takeLock = this.takeLock;
takeLock.lock();