Merge pull request #395 from couclock/AMQ-7312

AMQ-7312 virtualSelectorCacheBrokerPlugin addConsumer issue
diff --git a/activemq-broker/src/main/java/org/apache/activemq/transport/vm/VMTransportServer.java b/activemq-broker/src/main/java/org/apache/activemq/transport/vm/VMTransportServer.java
index 2f3d519..8bef1cc 100644
--- a/activemq-broker/src/main/java/org/apache/activemq/transport/vm/VMTransportServer.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/transport/vm/VMTransportServer.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.URI;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.activemq.command.BrokerInfo;
@@ -35,7 +36,7 @@
 
     private TransportAcceptListener acceptListener;
     private final URI location;
-    private boolean disposed;
+    private AtomicBoolean disposed = new AtomicBoolean(false);
 
     private final AtomicInteger connectionCount = new AtomicInteger(0);
     private final boolean disposeOnDisconnect;
@@ -64,7 +65,7 @@
     public VMTransport connect() throws IOException {
         TransportAcceptListener al;
         synchronized (this) {
-            if (disposed) {
+            if (disposed.get()) {
                 throw new IOException("Server has been disposed.");
             }
             al = acceptListener;
@@ -117,7 +118,9 @@
     }
 
     public void stop() throws IOException {
-        VMTransportFactory.stopped(this);
+        if (disposed.compareAndSet(false, true)) {
+            VMTransportFactory.stopped(this);
+        }
     }
 
     public URI getConnectURI() {
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java
index 5af3a37..a0a1ca8 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java
@@ -600,6 +600,45 @@
     }
 
 
+    public void testRepeatedServerClose() throws Exception {
+
+        connection.start();
+        Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
+        ActiveMQQueue destination = new ActiveMQQueue("TEST");
+        MessageProducer producer = session.createProducer(destination);
+
+        // Send the messages
+        producer.send(session.createTextMessage("1st"));
+        session.commit();
+
+        final int maxRedeliveries = 10000;
+        for (int i=0;i<=maxRedeliveries + 1;i++) {
+
+            final ActiveMQConnection toTest = (ActiveMQConnection)factory.createConnection(userName, password);
+            toTest.start();
+
+            // abortive close via broker
+            for (VMTransportServer transportServer : VMTransportFactory.SERVERS.values()) {
+                transportServer.stop();
+            }
+
+            Wait.waitFor(new Wait.Condition() {
+                @Override
+                public boolean isSatisified() throws Exception {
+                    return toTest.isTransportFailed();
+                }
+            },10000, 100 );
+
+            try {
+                toTest.close();
+            } catch (Exception expected) {
+            } finally {
+            }
+        }
+    }
+
+
+
     public void testRepeatedRedeliveryOnMessageNoCommit() throws Exception {
 
         connection.start();
diff --git a/activemq-web-console/src/main/webapp/WEB-INF/web.xml b/activemq-web-console/src/main/webapp/WEB-INF/web.xml
index 2f50e5b..9672c84 100644
--- a/activemq-web-console/src/main/webapp/WEB-INF/web.xml
+++ b/activemq-web-console/src/main/webapp/WEB-INF/web.xml
@@ -155,7 +155,10 @@
   </error-page>
   
   <session-config>
-  	<session-timeout>30</session-timeout>
+    <session-timeout>30</session-timeout>
+    <cookie-config>
+      <http-only>true</http-only>
+    </cookie-config>
   </session-config>
 
   <context-param>
diff --git a/activemq-web-console/src/main/webapp/js/plotkit/Layout.js b/activemq-web-console/src/main/webapp/js/plotkit/Layout.js
index f57951a..eea64aa 100644
--- a/activemq-web-console/src/main/webapp/js/plotkit/Layout.js
+++ b/activemq-web-console/src/main/webapp/js/plotkit/Layout.js
@@ -454,7 +454,7 @@
         var tickCount = 0;
 
         this.xticks = new Array();
-        for (var i = 0; i <= xvalues.length; i++) {
+        for (var i = 0; i < xvalues.length; i++) {
             if (xvalues[i] >= (tickCount) * roughSeparation) {
                 var pos = this.xscale * (xvalues[i] - this.minxval);
                 if ((pos > 1.0) || (pos < 0.0))
diff --git a/assembly/src/release/webapps/api/WEB-INF/web.xml b/assembly/src/release/webapps/api/WEB-INF/web.xml
index 2b0caf6..e316422 100644
--- a/assembly/src/release/webapps/api/WEB-INF/web.xml
+++ b/assembly/src/release/webapps/api/WEB-INF/web.xml
@@ -71,4 +71,10 @@
         <url-pattern>/jolokia/*</url-pattern>
     </servlet-mapping>
 
-</web-app>
\ No newline at end of file
+    <session-config>
+        <cookie-config>
+            <http-only>true</http-only>
+        </cookie-config>
+    </session-config>
+
+</web-app>
diff --git a/doap.rdf b/doap.rdf
index c972233..532628a 100644
--- a/doap.rdf
+++ b/doap.rdf
@@ -25,7 +25,7 @@
 <!--
   =======================================================================
 
-   Copyright (c) 2006-2012 The Apache Software Foundation.  
+   Copyright (c) 2006-2019 The Apache Software Foundation.  
    All rights reserved.
 
   =======================================================================
@@ -34,13 +34,13 @@
     <created>2006-03-27</created>
     <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
     <name>Apache ActiveMQ</name>
-    <homepage rdf:resource="http://activemq.apache.org/" />
-    <asfext:pmc rdf:resource="http://activemq.apache.org/" />
+    <homepage rdf:resource="https://activemq.apache.org/" />
+    <asfext:pmc rdf:resource="https://activemq.apache.org/" />
     <shortdesc>ActiveMQ is the most popular and powerful open source Message Broker.</shortdesc>
     <description>ActiveMQ is a fast and powerful Message Broker which supports many Cross Language Clients and Protocols and many advanced features while fully supporting JMS 1.1 and J2EE 1.4.</description>
-    <bug-database rdf:resource="http://issues.apache.org/activemq/browse/AMQ" />
-    <mailing-list rdf:resource="http://activemq.apache.org/mailing-lists.html" />
-    <download-page rdf:resource="http://activemq.apache.org/download.html" />
+    <bug-database rdf:resource="https://issues.apache.org/jira/browse/AMQ" />
+    <mailing-list rdf:resource="https://activemq.apache.org/contact/" />
+    <download-page rdf:resource="https://activemq.apache.org/download.html" />
 
     <programming-language>Java</programming-language>
     <programming-language>C</programming-language>
diff --git a/pom.xml b/pom.xml
index bbf5d57..33aa7b1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,8 +73,7 @@
     <httpclient-version>4.5.9</httpclient-version>
     <httpcore-version>4.4.11</httpcore-version>
     <insight-version>1.2.0.Beta4</insight-version>
-    <jackson-version>2.9.9</jackson-version>
-    <jackson-databind-version>2.9.9.3</jackson-databind-version>
+    <jackson-version>2.9.10</jackson-version>
     <jasypt-version>1.9.2</jasypt-version>
     <jaxb-bundle-version>2.2.11_1</jaxb-bundle-version>
     <jetty9-version>9.4.19.v20190610</jetty9-version>
@@ -675,7 +674,7 @@
       <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-databind</artifactId>
-        <version>${jackson-databind-version}</version>
+        <version>${jackson-version}</version>
       </dependency>
 
       <!-- Used to configure the activemq logs -->