This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push: new 065f64c Fix remaining SpotBugs warnings in main code tree 065f64c is described below commit 065f64c7ee3762b5df191ababc72c3d50e523ab3 Author: Mark Thomas <ma...@apache.org> AuthorDate: Thu Nov 14 21:58:43 2019 +0000 Fix remaining SpotBugs warnings in main code tree --- .../tomcat/util/net/NioBlockingSelector.java | 4 +- java/org/apache/tomcat/util/threads/TaskQueue.java | 6 +- res/findbugs/filter-false-positives.xml | 83 ++++++++++++++++++++++ 3 files changed, 88 insertions(+), 5 deletions(-) diff --git a/java/org/apache/tomcat/util/net/NioBlockingSelector.java b/java/org/apache/tomcat/util/net/NioBlockingSelector.java index fe193bc..286c06f 100644 --- a/java/org/apache/tomcat/util/net/NioBlockingSelector.java +++ b/java/org/apache/tomcat/util/net/NioBlockingSelector.java @@ -41,7 +41,7 @@ public class NioBlockingSelector { private static final Log log = LogFactory.getLog(NioBlockingSelector.class); - private static int threadCounter = 0; + private static AtomicInteger threadCounter = new AtomicInteger(0); private final SynchronizedStack<KeyReference> keyReferenceStack = new SynchronizedStack<>(); @@ -58,7 +58,7 @@ public class NioBlockingSelector { poller = new BlockPoller(); poller.selector = sharedSelector; poller.setDaemon(true); - poller.setName("NioBlockingSelector.BlockPoller-"+(++threadCounter)); + poller.setName("NioBlockingSelector.BlockPoller-"+(threadCounter.getAndIncrement())); poller.start(); } diff --git a/java/org/apache/tomcat/util/threads/TaskQueue.java b/java/org/apache/tomcat/util/threads/TaskQueue.java index 03e738c..600fe5b 100644 --- a/java/org/apache/tomcat/util/threads/TaskQueue.java +++ b/java/org/apache/tomcat/util/threads/TaskQueue.java @@ -32,7 +32,7 @@ public class TaskQueue extends LinkedBlockingQueue<Runnable> { private static final long serialVersionUID = 1L; - private volatile ThreadPoolExecutor parent = null; + private transient volatile ThreadPoolExecutor parent = null; // No need to be volatile. This is written and read in a single thread // (when stopping a context and firing the listeners) @@ -55,12 +55,12 @@ public class TaskQueue extends LinkedBlockingQueue<Runnable> { } public boolean force(Runnable o) { - if ( parent==null || parent.isShutdown() ) throw new RejectedExecutionException("Executor not running, can't force a command into the queue"); + if (parent == null || parent.isShutdown()) throw new RejectedExecutionException("Executor not running, can't force a command into the queue"); return super.offer(o); //forces the item onto the queue, to be used if the task is rejected } public boolean force(Runnable o, long timeout, TimeUnit unit) throws InterruptedException { - if ( parent==null || parent.isShutdown() ) throw new RejectedExecutionException("Executor not running, can't force a command into the queue"); + if (parent == null || parent.isShutdown()) throw new RejectedExecutionException("Executor not running, can't force a command into the queue"); return super.offer(o,timeout,unit); //forces the item onto the queue, to be used if the task is rejected } diff --git a/res/findbugs/filter-false-positives.xml b/res/findbugs/filter-false-positives.xml index dff3613..4578e0b 100644 --- a/res/findbugs/filter-false-positives.xml +++ b/res/findbugs/filter-false-positives.xml @@ -1147,6 +1147,11 @@ <Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" /> </Match> <Match> + <!-- Field is populated by JNI code --> + <Class name="org.apache.tomcat.jni.Sockaddr" /> + <Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/> + </Match> + <Match> <Class name="org.apache.tomcat.util.IntrospectionUtils" /> <Method name="findMethod"/> <Bug code="NP" /> @@ -1312,6 +1317,25 @@ <Bug code="NN" /> </Match> <Match> + <!-- There is only a single wait in run() when the poller is idle --> + <Class name="org.apache.tomcat.util.net.AprEndpoint$Poller"/> + <Or> + <Method name="add"/> + <Method name="close"/> + <Method name="destroy"/> + </Or> + <Bug pattern="NO_NOTIFY_NOT_NOTIFYALL" /> + </Match> + <Match> + <!-- Single condition. No interupts. --> + <Or> + <Class name="org.apache.tomcat.util.net.AprEndpoint$Poller"/> + <Class name="org.apache.tomcat.util.net.AprEndpoint$Sendfile"/> + </Or> + <Method name="destroy"/> + <Bug pattern="WA_NOT_IN_LOOP" /> + </Match> + <Match> <Class name="org.apache.tomcat.util.net.AprEndpoint$Sendfile"/> <Method name="run"/> <Or> @@ -1322,6 +1346,21 @@ </Or> </Match> <Match> + <!-- There is only a single wait in run() when the poller is idle --> + <Class name="org.apache.tomcat.util.net.AprEndpoint$Sendfile"/> + <Or> + <Method name="add"/> + <Method name="destroy"/> + </Or> + <Bug pattern="NO_NOTIFY_NOT_NOTIFYALL" /> + </Match> + <Match> + <!-- Simpler to wait a pollTime than test each Poller thread --> + <Class name="org.apache.tomcat.util.net.AprEndpoint$Sendfile"/> + <Method name="destroy"/> + <Bug pattern="UW_UNCOND_WAIT" /> + </Match> + <Match> <!-- Sync is there to protect referenced object not field --> <Class name="org.apache.tomcat.util.net.AprEndpoint$SocketEventProcessor"/> <Method name="run"/> @@ -1365,6 +1404,24 @@ <Bug code="ML"/> </Match> <Match> + <!-- Single condition so no need for wait to be in loop --> + <Class name="org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper"/> + <Or> + <Method name="read"/> + <Method name="write"/> + </Or> + <Bug pattern="WA_NOT_IN_LOOP" /> + </Match> + <Match> + <!-- Single wait so no need for notifyAll() --> + <Class name="org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$VectoredIOCompletionHandler"/> + <Or> + <Method name="completed"/> + <Method name="failed"/> + </Or> + <Bug pattern="NO_NOTIFY_NOT_NOTIFYALL " /> + </Match> + <Match> <Class name="org.apache.tomcat.util.net.SecureNioChannel"/> <Method name="rehandshake"/> <Bug code="DE" /> @@ -1382,6 +1439,26 @@ <Bug code="SF" /> </Match> <Match> + <!-- Stream will be closed --> + <Class name="org.apache.tomcat.util.net.jsse.PEMFile" /> + <Method name="<init>" /> + <Pattern name="OS_OPEN_STREAM" /> + </Match> + <Match> + <!-- Array elements are not modified after assignment --> + <Class name="org.apache.tomcat.util.net.openssl.OpenSSLEngine" /> + <Or> + <Field name="peerCerts"/> + <Field name="x509PeerCerts"/> + </Or> + <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" /> + </Match> + <Match> + <!-- No performance issue as there is no DNS resolution --> + <Class name="org.apache.tomcat.util.scan.StandardJarScanner" /> + <Bug pattern="DMI_COLLECTION_OF_URLS" /> + </Match> + <Match> <!-- Yes the simple name is the same as the super class. Accept it. --> <Class name="org.apache.tomcat.util.threads.ThreadPoolExecutor" /> <Bug code="Nm" /> @@ -1398,6 +1475,12 @@ <Method name="upgradeDispatch"/> <Bug code="SF" /> </Match> + <Match> + <!-- The array contents is never mutated. --> + <Class name="org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer" /> + <Field name="buffers" /> + <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" /> + </Match> <!-- Example code --> <Match> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org