Author: markt
Date: Wed Jul 9 22:04:44 2014
New Revision: 1609326
URL: http://svn.apache.org/r1609326
Log:
Merge changes from Pool 2 to r1609323.
Modified:
tomcat/trunk/java/org/apache/tomcat/buildutil/SignCode.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/ (props changed)
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseObjectPoolConfig.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPool.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPoolMXBean.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPool.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPoolMXBean.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/InterruptibleReentrantLock.java
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/LinkedBlockingDeque.java
(contents, props changed)
tomcat/trunk/res/checkstyle/org-import-control.xml
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/tomcat/buildutil/SignCode.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/buildutil/SignCode.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/buildutil/SignCode.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/buildutil/SignCode.java Wed Jul 9
22:04:44 2014
@@ -16,14 +16,34 @@
*/
package org.apache.tomcat.buildutil;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPConnection;
+import javax.xml.soap.SOAPConnectionFactory;
+import javax.xml.soap.SOAPConstants;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPPart;
+
+import org.apache.tomcat.util.codec.binary.Base64;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
/**
* Ant task that submits a file to the Symantec code-signing service.
@@ -32,6 +52,9 @@ public class SignCode extends Task {
private final List<FileSet> filesets = new ArrayList<>();
+ private static String USERNAME = "AOOAPI";
+ private static String PASSWORD = "Demo1234!";
+ private static String PARTNERCODE = "4615797APA95264";
public void addFileset(FileSet fileset) {
filesets.add(fileset);
@@ -53,9 +76,151 @@ public class SignCode extends Task {
for (int i = 0; i < files.length; i++) {
File file = new File(basedir, files[i]);
filesToSign.add(file);
- log("TODO: Sign " + file.getAbsolutePath());
}
}
}
+
+ try {
+ // Construct the signing request
+ log("Constructing the code signing request");
+
+ // Create the SOAP message
+ MessageFactory factory =
MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
+ SOAPMessage message = factory.createMessage();
+
+ // Populate envelope
+ SOAPPart soapPart = message.getSOAPPart();
+ SOAPEnvelope envelope = soapPart.getEnvelope();
+
envelope.addNamespaceDeclaration("soapenv","http://schemas.xmlsoap.org/soap/envelope/");
+
envelope.addNamespaceDeclaration("cod","http://api.ws.symantec.com/webtrust/codesigningservice");
+
+ SOAPBody body = envelope.getBody();
+
+ SOAPElement requestSigning =
+ body.addChildElement("requestSigning", "cod");
+
+ SOAPElement requestSigningRequest =
+ requestSigning.addChildElement("requestSigningRequest",
"cod");
+
+ SOAPElement authToken =
requestSigningRequest.addChildElement("authToken", "cod");
+ SOAPElement userName = authToken.addChildElement("userName",
"cod");
+ userName.addTextNode(USERNAME);
+ SOAPElement password = authToken.addChildElement("password",
"cod");
+ password.addTextNode(PASSWORD);
+ SOAPElement partnerCode = authToken.addChildElement("partnerCode",
"cod");
+ partnerCode.addTextNode(PARTNERCODE);
+
+ SOAPElement applicationName =
+ requestSigningRequest.addChildElement("applicationName",
"cod");
+ applicationName.addTextNode("Apache Tomcat");
+
+ SOAPElement applicationVersion =
+
requestSigningRequest.addChildElement("applicationVersion", "cod");
+ applicationVersion.addTextNode("8.0.x trunk");
+
+ SOAPElement signingServiceName =
+
requestSigningRequest.addChildElement("signingServiceName", "cod");
+ signingServiceName.addTextNode("Microsoft Signing");
+
+ SOAPElement commaDelimitedFileNames =
+
requestSigningRequest.addChildElement("commaDelimitedFileNames", "cod");
+
commaDelimitedFileNames.addTextNode(getFileNames(filesToSign.size()));
+
+ SOAPElement application =
+ requestSigningRequest.addChildElement("application",
"cod");
+ application.addTextNode(getApplicationString(filesToSign));
+
+ // Send the message
+ SOAPConnectionFactory soapConnectionFactory =
SOAPConnectionFactory.newInstance();
+ SOAPConnection connection =
soapConnectionFactory.createConnection();
+ java.net.URL endpoint = new
URL("https://test-api.ws.symantec.com:443/webtrust/SigningService");
+
+ log("Sending siging request to server and waiting for reponse");
+ SOAPMessage response = connection.call(message, endpoint);
+
+ log("Processing response");
+ SOAPElement responseBody = response.getSOAPBody();
+ log(responseBody.getTextContent());
+
+ // Should come back signed
+ NodeList bodyNodes = responseBody.getChildNodes();
+ NodeList requestSigningResponseNodes =
bodyNodes.item(0).getChildNodes();
+ NodeList returnNodes =
requestSigningResponseNodes.item(0).getChildNodes();
+
+ String signingSetID = null;
+ String signingSetStatus = null;
+
+ for (int i = 0; i < returnNodes.getLength(); i++) {
+ Node returnNode = returnNodes.item(i);
+ if (returnNode.getLocalName().equals("signingSetID")) {
+ signingSetID = returnNode.getTextContent();
+ } else if
(returnNode.getLocalName().equals("signingSetStatus")) {
+ signingSetStatus = returnNode.getTextContent();
+ }
+ }
+
+ if (!"SIGNED".equals(signingSetStatus)) {
+ throw new BuildException("Signing failed. Status was: " +
signingSetStatus);
+ }
+
+ log("TODO: Download signingSet: " + signingSetID);
+
+
+ } catch (SOAPException | IOException e) {
+ throw new BuildException(e);
+ }
+ }
+
+ /**
+ * Signing service requires unique files names. Since files will be
returned
+ * in order, use dummy names that we know are unique.
+ */
+ private String getFileNames(int fileCount) {
+ StringBuilder sb = new StringBuilder();
+
+ boolean first = true;
+
+ for (int i = 0; i < fileCount; i++) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(',');
+ }
+ sb.append(Integer.toString(i));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Zips the files, base 64 encodes the resulting zip and then returns the
+ * string. It would be far more efficient to stream this directly to the
+ * signing server but the files that need to be signed are relatively small
+ * and this simpler to write.
+ *
+ * @param files Files to be signed
+ */
+ private String getApplicationString(List<File> files) throws IOException {
+ // 10 MB should be more than enough for Tomcat
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(10 * 1024 *
1024);
+ try (ZipOutputStream zos = new ZipOutputStream(baos)) {
+
+ byte[] buf = new byte[32 * 1024];
+
+ for (int i = 0; i < files.size() ; i++) {
+ try (FileInputStream fis = new FileInputStream(files.get(i))) {
+ ZipEntry zipEntry = new ZipEntry(Integer.toString(i));
+ zos.putNextEntry(zipEntry);
+
+ int numRead;
+ while ( (numRead = fis.read(buf) ) >= 0) {
+ zos.write(buf, 0, numRead);
+ }
+ }
+ }
+ }
+
+ log("" + baos.size());
+
+ return Base64.encodeBase64String(baos.toByteArray());
}
}
Propchange: tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/
------------------------------------------------------------------------------
Merged
/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2:r1593564-1609323
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java
Wed Jul 9 22:04:44 2014
@@ -63,6 +63,7 @@ public abstract class BaseGenericObjectP
private volatile long maxWaitMillis =
BaseObjectPoolConfig.DEFAULT_MAX_WAIT_MILLIS;
private volatile boolean lifo = BaseObjectPoolConfig.DEFAULT_LIFO;
+ private final boolean fairness;
private volatile boolean testOnCreate =
BaseObjectPoolConfig.DEFAULT_TEST_ON_CREATE;
private volatile boolean testOnBorrow =
@@ -135,6 +136,7 @@ public abstract class BaseGenericObjectP
// save the current CCL to be used later by the evictor Thread
factoryClassLoader = Thread.currentThread().getContextClassLoader();
+ fairness = config.getFairness();
}
@@ -247,6 +249,17 @@ public abstract class BaseGenericObjectP
public final boolean getLifo() {
return lifo;
}
+
+ /**
+ * Returns whether or not the pool serves threads waiting to borrow
objects fairly.
+ * True means that waiting threads are served as if waiting in a FIFO
queue.
+ *
+ * @return <code>true</code> if waiting threads are to be served
+ * by the pool in arrival order
+ */
+ public final boolean getFairness() {
+ return fairness;
+ }
/**
* Sets whether the pool has LIFO (last in, first out) behaviour with
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseObjectPoolConfig.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseObjectPoolConfig.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseObjectPoolConfig.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseObjectPoolConfig.java
Wed Jul 9 22:04:44 2014
@@ -33,6 +33,13 @@ public abstract class BaseObjectPoolConf
* @see GenericKeyedObjectPool#getLifo()
*/
public static final boolean DEFAULT_LIFO = true;
+
+ /**
+ * The default value for the {@code fairness} configuration attribute.
+ * @see GenericObjectPool#getFairness()
+ * @see GenericKeyedObjectPool#getFairness()
+ */
+ public static final boolean DEFAULT_FAIRNESS = false;
/**
* The default value for the {@code maxWait} configuration attribute.
@@ -146,6 +153,8 @@ public abstract class BaseObjectPoolConf
private boolean lifo = DEFAULT_LIFO;
+
+ private boolean fairness = DEFAULT_FAIRNESS;
private long maxWaitMillis = DEFAULT_MAX_WAIT_MILLIS;
@@ -194,6 +203,20 @@ public abstract class BaseObjectPoolConf
public boolean getLifo() {
return lifo;
}
+
+ /**
+ * Get the value for the {@code fairness} configuration attribute for pools
+ * created with this configuration instance.
+ *
+ * @return The current setting of {@code fairness} for this configuration
+ * instance
+ *
+ * @see GenericObjectPool#getFairness()
+ * @see GenericKeyedObjectPool#getFairness()
+ */
+ public boolean getFairness() {
+ return fairness;
+ }
/**
* Set the value for the {@code lifo} configuration attribute for pools
@@ -208,6 +231,20 @@ public abstract class BaseObjectPoolConf
public void setLifo(boolean lifo) {
this.lifo = lifo;
}
+
+ /**
+ * Set the value for the {@code fairness} configuration attribute for pools
+ * created with this configuration instance.
+ *
+ * @param fairness The new setting of {@code fairness}
+ * for this configuration instance
+ *
+ * @see GenericObjectPool#getFairness()
+ * @see GenericKeyedObjectPool#getFairness()
+ */
+ public void setFairness(boolean fairness) {
+ this.fairness = fairness;
+ }
/**
* Get the value for the {@code maxWait} configuration attribute for pools
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPool.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPool.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPool.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPool.java
Wed Jul 9 22:04:44 2014
@@ -103,6 +103,7 @@ public class GenericKeyedObjectPool<K,T>
throw new IllegalArgumentException("factory may not be null");
}
this.factory = factory;
+ this.fairness = config.getFairness();
setConfig(config);
@@ -340,7 +341,7 @@ public class GenericKeyedObjectPool<K,T>
boolean blockWhenExhausted = getBlockWhenExhausted();
boolean create;
- long waitTime = 0;
+ long waitTime = System.currentTimeMillis();
ObjectDeque<T> objectDeque = register(key);
try {
@@ -356,10 +357,8 @@ public class GenericKeyedObjectPool<K,T>
if (borrowMaxWaitMillis < 0) {
p = objectDeque.getIdleObjects().takeFirst();
} else {
- waitTime = System.currentTimeMillis();
p = objectDeque.getIdleObjects().pollFirst(
borrowMaxWaitMillis,
TimeUnit.MILLISECONDS);
- waitTime = System.currentTimeMillis() - waitTime;
}
}
if (p == null) {
@@ -431,7 +430,7 @@ public class GenericKeyedObjectPool<K,T>
deregister(key);
}
- updateStatsBorrow(p, waitTime);
+ updateStatsBorrow(p, System.currentTimeMillis() - waitTime);
return p.getObject();
}
@@ -534,6 +533,12 @@ public class GenericKeyedObjectPool<K,T>
} else {
idleObjects.addLast(p);
}
+ if (isClosed()) {
+ // Pool closed while object was being added to idle objects.
+ // Make sure the returned object is destroyed rather than left
+ // in the idle object pool (which would effectively be a leak)
+ clear(key);
+ }
}
if (hasBorrowWaiters()) {
@@ -1083,7 +1088,7 @@ public class GenericKeyedObjectPool<K,T>
lock.lock();
objectDeque = poolMap.get(k);
if (objectDeque == null) {
- objectDeque = new ObjectDeque<>();
+ objectDeque = new ObjectDeque<>(fairness);
objectDeque.getNumInterested().incrementAndGet();
// NOTE: Keys must always be added to both poolMap and
// poolKeyList at the same time while protected by
@@ -1399,8 +1404,7 @@ public class GenericKeyedObjectPool<K,T>
*/
private class ObjectDeque<S> {
- private final LinkedBlockingDeque<PooledObject<S>> idleObjects =
- new LinkedBlockingDeque<>();
+ private final LinkedBlockingDeque<PooledObject<S>> idleObjects;
/*
* Number of instances created - number destroyed.
@@ -1425,6 +1429,15 @@ public class GenericKeyedObjectPool<K,T>
private final AtomicLong numInterested = new AtomicLong(0);
/**
+ * Create a new ObjecDeque with the given fairness policy.
+ * @param fairness true means client threads waiting to borrow /
return instances
+ * will be served as if waiting in a FIFO queue.
+ */
+ public ObjectDeque(boolean fairness) {
+ idleObjects = new LinkedBlockingDeque<>(fairness);
+ }
+
+ /**
* Obtain the idle objects for the current key.
*
* @return The idle objects
@@ -1470,6 +1483,7 @@ public class GenericKeyedObjectPool<K,T>
private volatile int maxTotalPerKey =
GenericKeyedObjectPoolConfig.DEFAULT_MAX_TOTAL_PER_KEY;
private final KeyedPooledObjectFactory<K,T> factory;
+ private final boolean fairness;
//--- internal attributes
--------------------------------------------------
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPoolMXBean.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPoolMXBean.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPoolMXBean.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPoolMXBean.java
Wed Jul 9 22:04:44 2014
@@ -41,6 +41,11 @@ public interface GenericKeyedObjectPoolM
*/
boolean getBlockWhenExhausted();
/**
+ * See {@link GenericKeyedObjectPool#getFairness()}
+ * @return See {@link GenericKeyedObjectPool#getFairness()}
+ */
+ boolean getFairness();
+ /**
* See {@link GenericKeyedObjectPool#getLifo()}
* @return See {@link GenericKeyedObjectPool#getLifo()}
*/
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPool.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPool.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPool.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPool.java
Wed Jul 9 22:04:44 2014
@@ -109,6 +109,8 @@ public class GenericObjectPool<T> extend
}
this.factory = factory;
+ idleObjects = new LinkedBlockingDeque<>(config.getFairness());
+
setConfig(config);
startEvictor(getTimeBetweenEvictionRunsMillis());
@@ -420,7 +422,7 @@ public class GenericObjectPool<T> extend
boolean blockWhenExhausted = getBlockWhenExhausted();
boolean create;
- long waitTime = 0;
+ long waitTime = System.currentTimeMillis();
while (p == null) {
create = false;
@@ -434,10 +436,8 @@ public class GenericObjectPool<T> extend
if (borrowMaxWaitMillis < 0) {
p = idleObjects.takeFirst();
} else {
- waitTime = System.currentTimeMillis();
p = idleObjects.pollFirst(borrowMaxWaitMillis,
TimeUnit.MILLISECONDS);
- waitTime = System.currentTimeMillis() - waitTime;
}
}
if (p == null) {
@@ -506,7 +506,7 @@ public class GenericObjectPool<T> extend
}
}
- updateStatsBorrow(p, waitTime);
+ updateStatsBorrow(p, System.currentTimeMillis() - waitTime);
return p.getObject();
}
@@ -607,6 +607,12 @@ public class GenericObjectPool<T> extend
} else {
idleObjects.addLast(p);
}
+ if (isClosed()) {
+ // Pool closed while object was being added to idle objects.
+ // Make sure the returned object is destroyed rather than left
+ // in the idle object pool (which would effectively be a leak)
+ clear();
+ }
}
updateStatsReturn(activeTime);
}
@@ -903,6 +909,12 @@ public class GenericObjectPool<T> extend
idleObjects.addLast(p);
}
}
+ if (isClosed()) {
+ // Pool closed while object was being added to idle objects.
+ // Make sure the returned object is destroyed rather than left
+ // in the idle object pool (which would effectively be a leak)
+ clear();
+ }
}
/**
@@ -1097,8 +1109,7 @@ public class GenericObjectPool<T> extend
* {@link #_maxActive} objects created at any one time.
*/
private final AtomicLong createCount = new AtomicLong(0);
- private final LinkedBlockingDeque<PooledObject<T>> idleObjects =
- new LinkedBlockingDeque<>();
+ private final LinkedBlockingDeque<PooledObject<T>> idleObjects;
// JMX specific attributes
private static final String ONAME_BASE =
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPoolMXBean.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPoolMXBean.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPoolMXBean.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPoolMXBean.java
Wed Jul 9 22:04:44 2014
@@ -41,6 +41,11 @@ public interface GenericObjectPoolMXBean
* See {@link GenericObjectPool#getLifo()}
* @return See {@link GenericObjectPool#getLifo()}
*/
+ boolean getFairness();
+ /**
+ * See {@link GenericObjectPool#getFairness()}
+ * @return See {@link GenericObjectPool#getFairness()}
+ */
boolean getLifo();
/**
* See {@link GenericObjectPool#getMaxIdle()}
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/InterruptibleReentrantLock.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/InterruptibleReentrantLock.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/InterruptibleReentrantLock.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/InterruptibleReentrantLock.java
Wed Jul 9 22:04:44 2014
@@ -34,6 +34,16 @@ class InterruptibleReentrantLock extends
private static final long serialVersionUID = 1L;
/**
+ * Create a new InterruptibleReentrantLock with the given fairness policy.
+ *
+ * @param fairness true means threads should acquire contended locks as if
+ * waiting in a FIFO queue
+ */
+ public InterruptibleReentrantLock(boolean fairness) {
+ super(fairness);
+ }
+
+ /**
* Interrupt the threads that are waiting on a specific condition
*
* @param condition the condition on which the threads are waiting.
Modified:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/LinkedBlockingDeque.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/LinkedBlockingDeque.java?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/LinkedBlockingDeque.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/LinkedBlockingDeque.java
Wed Jul 9 22:04:44 2014
@@ -146,14 +146,13 @@ class LinkedBlockingDeque<E> extends Abs
private final int capacity;
/** Main lock guarding all access */
- private final InterruptibleReentrantLock lock =
- new InterruptibleReentrantLock();
+ private final InterruptibleReentrantLock lock;
/** Condition for waiting takes */
- private final Condition notEmpty = lock.newCondition();
+ private final Condition notEmpty;
/** Condition for waiting puts */
- private final Condition notFull = lock.newCondition();
+ private final Condition notFull;
/**
* Creates a {@code LinkedBlockingDeque} with a capacity of
@@ -162,6 +161,16 @@ class LinkedBlockingDeque<E> extends Abs
public LinkedBlockingDeque() {
this(Integer.MAX_VALUE);
}
+
+ /**
+ * Creates a {@code LinkedBlockingDeque} with a capacity of
+ * {@link Integer#MAX_VALUE} and the given fairness policy.
+ * @param fairness true means threads waiting on the deque should be served
+ * as if waiting in a FIFO request queue
+ */
+ public LinkedBlockingDeque(boolean fairness) {
+ this(Integer.MAX_VALUE, fairness);
+ }
/**
* Creates a {@code LinkedBlockingDeque} with the given (fixed) capacity.
@@ -170,8 +179,24 @@ class LinkedBlockingDeque<E> extends Abs
* @throws IllegalArgumentException if {@code capacity} is less than 1
*/
public LinkedBlockingDeque(int capacity) {
+ this(capacity, false);
+ }
+
+ /**
+ * Creates a {@code LinkedBlockingDeque} with the given (fixed) capacity
+ * and fairness policy.
+ *
+ * @param capacity the capacity of this deque
+ * @param fairness true means threads waiting on the deque should be served
+ * as if waiting in a FIFO request queue
+ * @throws IllegalArgumentException if {@code capacity} is less than 1
+ */
+ public LinkedBlockingDeque(int capacity, boolean fairness) {
if (capacity <= 0) throw new IllegalArgumentException();
this.capacity = capacity;
+ lock = new InterruptibleReentrantLock(fairness);
+ notEmpty = lock.newCondition();
+ notFull = lock.newCondition();
}
/**
Propchange:
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/LinkedBlockingDeque.java
('svn:mergeinfo' removed)
Modified: tomcat/trunk/res/checkstyle/org-import-control.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/res/checkstyle/org-import-control.xml?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
--- tomcat/trunk/res/checkstyle/org-import-control.xml (original)
+++ tomcat/trunk/res/checkstyle/org-import-control.xml Wed Jul 9 22:04:44 2014
@@ -124,6 +124,7 @@
<allow pkg="javax.servlet"/>
<subpackage name="buildutil">
<allow pkg="org.apache.tools.ant"/>
+ <allow pkg="org.apache.tomcat.util"/>
</subpackage>
<subpackage name="dbcp">
<allow pkg="org.apache.juli"/>
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1609326&r1=1609325&r2=1609326&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Jul 9 22:04:44 2014
@@ -217,6 +217,10 @@
<bug>56685</bug>: Add quotes necessary for <code>daemon.sh</code> to
work correctly on Solaris. Based on a suggesiton by lfuka. (markt)
</fix>
+ <update>
+ Update package renamed Apache Commons Pool2 to r1609323 to pick various
+ bug fixes. (markt)
+ </update>
</changelog>
</subsection>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]