This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push:
new a472f6a Pull down APR specific lock structure
a472f6a is described below
commit a472f6af67a7cc03fe42a55cfaa7902933117afd
Author: remm <[email protected]>
AuthorDate: Thu Nov 21 11:28:07 2019 +0100
Pull down APR specific lock structure
They would otherwise be allocated for NIOx but are not used at all.
---
java/org/apache/tomcat/util/net/AprEndpoint.java | 21 ++++++++++++++
.../apache/tomcat/util/net/SocketWrapperBase.java | 32 +++++++---------------
2 files changed, 31 insertions(+), 22 deletions(-)
diff --git a/java/org/apache/tomcat/util/net/AprEndpoint.java
b/java/org/apache/tomcat/util/net/AprEndpoint.java
index f34ccf3..10322da 100644
--- a/java/org/apache/tomcat/util/net/AprEndpoint.java
+++ b/java/org/apache/tomcat/util/net/AprEndpoint.java
@@ -32,6 +32,7 @@ import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
import javax.net.ssl.KeyManager;
@@ -2020,9 +2021,21 @@ public class AprEndpoint extends
AbstractEndpoint<Long,Long> implements SNICallB
// This field should only be used by Poller#run()
private int pollerFlags = 0;
+ /*
+ * Used if block/non-blocking is set at the socket level. The client is
+ * responsible for the thread-safe use of this field via the locks
provided.
+ */
+ private volatile boolean blockingStatus = true;
+ private final Lock blockingStatusReadLock;
+ private final WriteLock blockingStatusWriteLock;
+
public AprSocketWrapper(Long socket, AprEndpoint endpoint) {
super(socket, endpoint);
+ ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+ this.blockingStatusReadLock = lock.readLock();
+ this.blockingStatusWriteLock = lock.writeLock();
+
// TODO Make the socketWriteBuffer size configurable and align the
// SSL and app buffer size settings with NIO & NIO2.
if (endpoint.isSSLEnabled()) {
@@ -2035,6 +2048,14 @@ public class AprEndpoint extends
AbstractEndpoint<Long,Long> implements SNICallB
socketBufferHandler = new SocketBufferHandler(6 * 1500, 6 * 1500,
true);
}
+ public boolean getBlockingStatus() { return blockingStatus; }
+ public void setBlockingStatus(boolean blockingStatus) {
+ this.blockingStatus = blockingStatus;
+ }
+ public Lock getBlockingStatusReadLock() { return
blockingStatusReadLock; }
+ public WriteLock getBlockingStatusWriteLock() {
+ return blockingStatusWriteLock;
+ }
@Override
public int read(boolean block, byte[] b, int off, int len) throws
IOException {
diff --git a/java/org/apache/tomcat/util/net/SocketWrapperBase.java
b/java/org/apache/tomcat/util/net/SocketWrapperBase.java
index 1b700cb..e81eb26 100644
--- a/java/org/apache/tomcat/util/net/SocketWrapperBase.java
+++ b/java/org/apache/tomcat/util/net/SocketWrapperBase.java
@@ -29,9 +29,6 @@ import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -58,6 +55,7 @@ public abstract class SocketWrapperBase<E> {
private volatile boolean upgraded = false;
private boolean secure = false;
private String negotiatedProtocol = null;
+
/*
* Following cached for speed / reduced GC
*/
@@ -67,14 +65,8 @@ public abstract class SocketWrapperBase<E> {
protected String remoteAddr = null;
protected String remoteHost = null;
protected int remotePort = -1;
- /*
- * Used if block/non-blocking is set at the socket level. The client is
- * responsible for the thread-safe use of this field via the locks
provided.
- */
- private volatile boolean blockingStatus = true;
- private final Lock blockingStatusReadLock;
- private final WriteLock blockingStatusWriteLock;
- /*
+
+ /**
* Used to record the first IOException that occurs during non-blocking
* read/writes that can't be usefully propagated up the stack since there
is
* no user code or appropriate container code in the stack to handle it.
@@ -103,19 +95,23 @@ public abstract class SocketWrapperBase<E> {
*/
protected final WriteBuffer nonBlockingWriteBuffer = new
WriteBuffer(bufferedWriteSize);
+ /*
+ * Asynchronous operations.
+ */
protected final Semaphore readPending;
protected volatile OperationState<?> readOperation = null;
protected final Semaphore writePending;
protected volatile OperationState<?> writeOperation = null;
+ /**
+ * The org.apache.coyote.Processor instance currently associated
+ * with the wrapper.
+ */
protected Object currentProcessor = null;
public SocketWrapperBase(E socket, AbstractEndpoint<E,?> endpoint) {
this.socket = socket;
this.endpoint = endpoint;
- ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
- this.blockingStatusReadLock = lock.readLock();
- this.blockingStatusWriteLock = lock.writeLock();
if (endpoint.getUseAsyncIO() || needSemaphores()) {
readPending = new Semaphore(1);
writePending = new Semaphore(1);
@@ -278,14 +274,6 @@ public abstract class SocketWrapperBase<E> {
}
protected abstract void populateLocalPort();
- public boolean getBlockingStatus() { return blockingStatus; }
- public void setBlockingStatus(boolean blockingStatus) {
- this.blockingStatus = blockingStatus;
- }
- public Lock getBlockingStatusReadLock() { return blockingStatusReadLock; }
- public WriteLock getBlockingStatusWriteLock() {
- return blockingStatusWriteLock;
- }
public SocketBufferHandler getSocketBufferHandler() { return
socketBufferHandler; }
public boolean hasDataToRead() {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]