changeset 1412:f85c4b0c0469 icedtea-3.2.0pre02

Merge jdk8u102-b14
author andrew
date Fri, 05 Aug 2016 05:27:01 +0100
parents 8eb05dd032fe (current diff) 56b133772ec1 (diff)
children 459f130b3f85
files .hgtags
diffstat 8 files changed, 156 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Thu Aug 04 22:38:30 2016 +0100
+++ b/.hgtags	Fri Aug 05 05:27:01 2016 +0100
@@ -591,6 +591,10 @@
 4ea02753e66e348ee4639e157061bcbdef1d7ff3 jdk8u91-b13
 f8d0cfaa9900ebda679fa9df8319fb753858f283 jdk8u91-b14
 9f89788050d38ba4e19e24894eb8b3dd24c1a9d0 jdk8u91-b15
+7b719c1dec62535c34030cf3457abe6f478f13a0 jdk8u77-b00
+cafc1648f432eff2c392040af2db4505c3d290b6 jdk8u77-b01
+0f0077ee5e53365562ff77a01aa97d0c7374f447 jdk8u77-b02
+e8dc6eb11c761f20b44d8c4b8acb0846268872f1 jdk8u77-b03
 7deeb4f70404e4f52306f9d0bcfc482fc5f16fb3 jdk8u76-b00
 5786892e7c7d512ef9104a469ff7eafeaac12c38 jdk8u76-b01
 239155e48af89968b62e695a3233d42bed1a3282 jdk8u76-b02
@@ -661,3 +665,19 @@
 f8511bfb19c35d8d396dc53245c06cc3710657b1 jdk8u101-b12
 7ea39ff8c227ada9e3cdb1560ff27128afb16f50 icedtea-3.1.0
 48dbf4a68dc770ef17eee71a5bdfcb46a477157c icedtea-3.2.0pre01
+2bb2aec4b3e51aab96e9c25603c7c92fcbac46de jdk8u101-b13
+223d0e48a55b92255f5a613743a99e7deacaf455 jdk8u102-b00
+223d0e48a55b92255f5a613743a99e7deacaf455 jdk8u82-b00
+9d09a2f1395561fe71b1a83f53907ddc52e699d6 jdk8u102-b01
+564fbe28cbb0ff2e6f55623807ea816042de00ff jdk8u102-b02
+ab7dbd58a766fb01c6643f3a80c9e96ac1278a06 jdk8u102-b03
+626d8fa7a1bfd9e65b94117a526ba57b25ec3d14 jdk8u102-b04
+3c35b66b5345f615a3ff626111587c452c8c3893 jdk8u102-b05
+2a265ab91dd234348630dab92f622a616ab76a0e jdk8u102-b06
+8d44271dd11dd4bdc88ef647fd144e544791ecc4 jdk8u102-b07
+329501e6cc220884f005afc7cd330e227931fb21 jdk8u102-b08
+e108e30edcca932832e4e5edf1a15349d3be2fed jdk8u102-b09
+e0d70741f35cd16289de3fd6049834879725dae5 jdk8u102-b10
+360a2772486dd1aa818132222ea0b7fcfa5707ef jdk8u102-b11
+57546b5b575dec9ecfbb1e9a77d87c391a44ab96 jdk8u102-b12
+a7c292080d5ed76ea5e3b123c0dee4c340aa174f jdk8u102-b13
--- a/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.java	Thu Aug 04 22:38:30 2016 +0100
+++ b/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.java	Fri Aug 05 05:27:01 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2013 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/src/share/classes/com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl.java	Thu Aug 04 22:38:30 2016 +0100
+++ b/src/share/classes/com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl.java	Fri Aug 05 05:27:01 2016 +0100
@@ -54,11 +54,17 @@
 {
     protected Collection connectionCache;
 
+    private Acceptor acceptor;
+
     public CorbaInboundConnectionCacheImpl(ORB orb, Acceptor acceptor)
     {
         super(orb, acceptor.getConnectionCacheType(),
               ((CorbaAcceptor)acceptor).getMonitoringName());
         this.connectionCache = new ArrayList();
+        this.acceptor = acceptor;
+        if (orb.transportDebugFlag) {
+            dprint(": " + acceptor );
+        }
     }
 
     ////////////////////////////////////////////////////
@@ -66,11 +72,25 @@
     // pept.transport.InboundConnectionCache
     //
 
+    public void close () {
+
+        super.close();
+        if (orb.transportDebugFlag) {
+            dprint(".close: " + acceptor );
+        }
+        this.acceptor.close();
+
+    }
+
     public Connection get(Acceptor acceptor)
     {
         throw wrapper.methodShouldNotBeCalled();
     }
 
+    public Acceptor getAcceptor () {
+        return acceptor;
+    }
+
     public void put(Acceptor acceptor, Connection connection)
     {
         if (orb.transportDebugFlag) {
--- a/src/share/classes/com/sun/corba/se/impl/transport/CorbaTransportManagerImpl.java	Thu Aug 04 22:38:30 2016 +0100
+++ b/src/share/classes/com/sun/corba/se/impl/transport/CorbaTransportManagerImpl.java	Fri Aug 05 05:27:01 2016 +0100
@@ -188,8 +188,9 @@
             for (Object cc : outboundConnectionCaches.values()) {
                 ((ConnectionCache)cc).close() ;
             }
-            for (Object cc : inboundConnectionCaches.values()) {
-                ((ConnectionCache)cc).close() ;
+            for (Object icc : inboundConnectionCaches.values()) {
+                ((ConnectionCache)icc).close() ;
+                unregisterAcceptor(((InboundConnectionCache)icc).getAcceptor());
             }
             getSelector(0).close();
         } finally {
--- a/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java	Thu Aug 04 22:38:30 2016 +0100
+++ b/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java	Fri Aug 05 05:27:01 2016 +0100
@@ -26,16 +26,20 @@
 package com.sun.corba.se.impl.transport;
 
 import java.io.IOException;
+import java.net.ServerSocket;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.SelectableChannel;
+import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.Selector;
+import java.nio.channels.ClosedSelectorException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Iterator;
 import java.util.List;
 
+
 import com.sun.corba.se.pept.broker.Broker;
 import com.sun.corba.se.pept.transport.Acceptor;
 import com.sun.corba.se.pept.transport.Connection;
@@ -111,7 +115,16 @@
                 interestOpsList.add(keyAndOp);
             }
             // tell Selector Thread there's an update to a SelectorKey's Ops
-            selector.wakeup();
+            try {
+                if (selector != null) {
+                    // wakeup Selector thread to process close request
+                    selector.wakeup();
+                }
+            } catch (Throwable t) {
+                if (orb.transportDebugFlag) {
+                    dprint(".registerInterestOps: selector.wakeup: ", t);
+                }
+            }
         }
         else {
             wrapper.selectionKeyInvalid(eventHandler.toString());
@@ -186,7 +199,9 @@
             if (selectionKey != null) {
                 selectionKey.cancel();
             }
-            selector.wakeup();
+            if (selector != null) {
+                selector.wakeup();
+            }
             return;
         }
 
@@ -239,6 +254,8 @@
             readerThread.close();
         }
 
+       clearDeferredRegistrations();
+
         // Selector
 
         try {
@@ -248,7 +265,7 @@
             }
         } catch (Throwable t) {
             if (orb.transportDebugFlag) {
-                dprint(".close: selector.close: " + t);
+                dprint(".close: selector.wakeup: ", t);
             }
         }
     }
@@ -273,15 +290,16 @@
                     n = selector.select(timeout);
                 } catch (IOException  e) {
                     if (orb.transportDebugFlag) {
-                        dprint(".run: selector.select: " + e);
+                        dprint(".run: selector.select: ", e);
                     }
+                } catch (ClosedSelectorException csEx) {
+                    if (orb.transportDebugFlag) {
+                        dprint(".run: selector.select: ", csEx);
+                    }
+                    break;
                 }
                 if (closed) {
-                    selector.close();
-                    if (orb.transportDebugFlag) {
-                        dprint(".run: closed - .run return");
-                    }
-                    return;
+                    break;
                 }
                 /*
                   if (timeout == 0 && orb.transportDebugFlag) {
@@ -321,6 +339,18 @@
                 }
             }
         }
+        try {
+            if (selector != null) {
+                if (orb.transportDebugFlag) {
+                    dprint(".run: selector.close ");
+                }
+                selector.close();
+            }
+        } catch (Throwable t) {
+            if (orb.transportDebugFlag) {
+                dprint(".run: selector.close: ", t);
+            }
+        }
     }
 
     /////////////////////////////////////////////////////
@@ -328,6 +358,44 @@
     // Implementation.
     //
 
+    private void clearDeferredRegistrations() {
+        synchronized (deferredRegistrations) {
+            int deferredListSize = deferredRegistrations.size();
+            if (orb.transportDebugFlag) {
+                dprint(".clearDeferredRegistrations:deferred list size == " + deferredListSize);
+            }
+            for (int i = 0; i < deferredListSize; i++) {
+                EventHandler eventHandler =
+                    (EventHandler)deferredRegistrations.get(i);
+                if (orb.transportDebugFlag) {
+                    dprint(".clearDeferredRegistrations: " + eventHandler);
+                }
+                SelectableChannel channel = eventHandler.getChannel();
+                SelectionKey selectionKey = null;
+
+                try {
+                    if (orb.transportDebugFlag) {
+                        dprint(".clearDeferredRegistrations:close channel == "
+                                + channel);
+                        dprint(".clearDeferredRegistrations:close channel class == "
+                                + channel.getClass().getName());
+                    }
+                    channel.close();
+                    selectionKey = eventHandler.getSelectionKey();
+                    if (selectionKey != null) {
+                        selectionKey.cancel();
+                        selectionKey.attach(null);
+                    }
+                } catch (IOException ioEx) {
+                    if (orb.transportDebugFlag) {
+                        dprint(".clearDeferredRegistrations: ", ioEx);
+                    }
+                }
+            }
+            deferredRegistrations.clear();
+        }
+    }
+
     private synchronized boolean isClosed ()
     {
         return closed;
@@ -344,7 +412,7 @@
             selector = Selector.open();
         } catch (IOException e) {
             if (orb.transportDebugFlag) {
-                dprint(".startSelector: Selector.open: IOException: " + e);
+                dprint(".startSelector: Selector.open: IOException: ", e);
             }
             // REVISIT - better handling/reporting
             RuntimeException rte =
@@ -379,7 +447,7 @@
                                          (Object)eventHandler);
                 } catch (ClosedChannelException e) {
                     if (orb.transportDebugFlag) {
-                        dprint(".handleDeferredRegistrations: " + e);
+                        dprint(".handleDeferredRegistrations: ", e);
                     }
                 }
                 eventHandler.setSelectionKey(selectionKey);
--- a/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java	Thu Aug 04 22:38:30 2016 +0100
+++ b/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java	Fri Aug 05 05:27:01 2016 +0100
@@ -264,7 +264,12 @@
 
             if (connection.shouldRegisterServerReadEvent()) {
                 Selector selector = orb.getTransportManager().getSelector(0);
-                selector.registerForEvent(connection.getEventHandler());
+                if (selector != null) {
+                    if (orb.transportDebugFlag) {
+                        dprint(".accept: registerForEvent: " + connection);
+                    }
+                    selector.registerForEvent(connection.getEventHandler());
+                }
             }
 
             getConnectionCache().reclaim();
@@ -273,12 +278,15 @@
             if (orb.transportDebugFlag) {
                 dprint(".accept:", e);
             }
-            orb.getTransportManager().getSelector(0).unregisterForEvent(this);
-            // REVISIT - need to close - recreate - then register new one.
-            orb.getTransportManager().getSelector(0).registerForEvent(this);
-            // NOTE: if register cycling we do not want to shut down ORB
-            // since local beans will still work.  Instead one will see
-            // a growing log file to alert admin of problem.
+            Selector selector = orb.getTransportManager().getSelector(0);
+            if (selector != null) {
+                selector.unregisterForEvent(this);
+                // REVISIT - need to close - recreate - then register new one.
+                selector.registerForEvent(this);
+                // NOTE: if register cycling we do not want to shut down ORB
+                // since local beans will still work.  Instead one will see
+                // a growing log file to alert admin of problem.
+            }
         }
     }
 
@@ -289,7 +297,9 @@
                 dprint(".close->:");
             }
             Selector selector = orb.getTransportManager().getSelector(0);
-            selector.unregisterForEvent(this);
+            if (selector != null) {
+                selector.unregisterForEvent(this);
+            }
             if (serverSocketChannel != null) {
                 serverSocketChannel.close();
             }
@@ -480,7 +490,9 @@
             // of calling SelectionKey.interestOps(<interest op>).
 
             Selector selector = orb.getTransportManager().getSelector(0);
-            selector.registerInterestOps(this);
+            if (selector != null) {
+                selector.registerInterestOps(this);
+            }
 
             if (orb.transportDebugFlag) {
                 dprint(".doWork<-:" + this);
--- a/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java	Thu Aug 04 22:38:30 2016 +0100
+++ b/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java	Fri Aug 05 05:27:01 2016 +0100
@@ -367,7 +367,10 @@
                 }
             }
             // REVISIT - make sure reader thread is killed.
-            orb.getTransportManager().getSelector(0).unregisterForEvent(this);
+            Selector selector = orb.getTransportManager().getSelector(0);
+            if (selector != null) {
+                selector.unregisterForEvent(this);
+            }
             // Notify anyone waiting.
             purgeCalls(wrapper.connectionAbort(ex), true, false);
             // REVISIT
@@ -801,7 +804,9 @@
             }
             try {
                 Selector selector = orb.getTransportManager().getSelector(0);
-                selector.unregisterForEvent(this);
+                if (selector != null) {
+                    selector.unregisterForEvent(this);
+                }
                 if (socketChannel != null) {
                     socketChannel.close();
                 }
@@ -824,7 +829,9 @@
                dprint(".closeConnectionResources->: " + this);
            }
            Selector selector = orb.getTransportManager().getSelector(0);
-           selector.unregisterForEvent(this);
+           if (selector != null) {
+               selector.unregisterForEvent(this);
+           }
            try {
              if (socketChannel != null)
               socketChannel.close() ;
--- a/src/share/classes/com/sun/corba/se/pept/transport/InboundConnectionCache.java	Thu Aug 04 22:38:30 2016 +0100
+++ b/src/share/classes/com/sun/corba/se/pept/transport/InboundConnectionCache.java	Fri Aug 05 05:27:01 2016 +0100
@@ -36,6 +36,8 @@
     public void put(Acceptor acceptor, Connection connection);
 
     public void remove(Connection connection);
+
+    public Acceptor getAcceptor();
 }
 
 // End of file.