changeset 21:ff18939d68d6 jdk6-b12

6755917: Changes for openjdk6 build 12 6372405: Server thread hangs when fragments don't complete because of connection abort 5104239: Java: thread deadlock 6191561: JCK15: api/org_omg/PortableInterceptor/ClientRequestInfo/index.html#RIMethods sometime hang 6486322: org.omg.CORBA.ORB.init() thread safety issue 6465377: NullPointerException for RMI ORB in 1.5.0_08 6438259: Wrong repository ID generated by IDLJ Summary: Final b12 state (as defined by the source bundle) Reviewed-by: darcy
author ohair
date Fri, 30 Jan 2009 17:10:04 -0800
parents 26261253a2e2
children e09e632b08d8
files make/com/sun/corba/minclude/com_sun_corba_se_impl_dynamicany.jmk make/com/sun/corba/minclude/com_sun_corba_se_impl_encoding.jmk make/com/sun/corba/minclude/com_sun_corba_se_impl_ior.jmk make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk make/com/sun/corba/minclude/com_sun_corba_se_impl_protocol.jmk make/com/sun/corba/minclude/com_sun_corba_se_spi_legacy_interceptor.jmk make/com/sun/corba/minclude/com_sun_corba_se_spi_monitoring.jmk make/com/sun/corba/minclude/com_sun_corba_se_spi_presentation_rmi.jmk make/com/sun/corba/minclude/com_sun_corba_se_spi_transport.jmk make/com/sun/corba/minclude/org_omg_CosNaming.jmk make/com/sun/corba/minclude/org_omg_DynamicAny.jmk make/com/sun/corba/minclude/org_omg_PortableInterceptor.jmk make/com/sun/corba/se/sources/Makefile make/javax/xa/Makefile make/org/omg/CORBA/Makefile src/share/classes/com/sun/corba/se/impl/encoding/BufferManagerReadStream.java src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java src/share/classes/com/sun/corba/se/impl/oa/poa/POAFactory.java src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java src/share/classes/com/sun/corba/se/impl/orb/ORBSingleton.java src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java src/share/classes/com/sun/corba/se/impl/resolver/INSURLOperationImpl.java src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc src/share/classes/com/sun/tools/corba/se/idl/Parser.java src/share/classes/org/omg/CORBA/ORB.java
diffstat 26 files changed, 154 insertions(+), 107 deletions(-) [+]
line wrap: on
line diff
--- a/make/com/sun/corba/minclude/com_sun_corba_se_impl_dynamicany.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_impl_dynamicany.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -41,4 +41,7 @@
 	com/sun/corba/se/impl/dynamicany/DynSequenceImpl.java \
 	com/sun/corba/se/impl/dynamicany/DynStructImpl.java \
 	com/sun/corba/se/impl/dynamicany/DynUnionImpl.java \
-	com/sun/corba/se/impl/dynamicany/DynValueImpl.java
+	com/sun/corba/se/impl/dynamicany/DynValueImpl.java \
+	com/sun/corba/se/impl/dynamicany/DynValueBoxImpl.java \
+	com/sun/corba/se/impl/dynamicany/DynValueCommonImpl.java
+
--- a/make/com/sun/corba/minclude/com_sun_corba_se_impl_encoding.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_impl_encoding.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -52,6 +52,8 @@
 	com/sun/corba/se/impl/encoding/CodeSetComponentInfo.java \
 	com/sun/corba/se/impl/encoding/EncapsInputStream.java \
 	com/sun/corba/se/impl/encoding/EncapsOutputStream.java \
+	com/sun/corba/se/impl/encoding/IDLJavaSerializationInputStream.java \
+	com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream.java \
 	com/sun/corba/se/impl/encoding/MarkAndResetHandler.java \
 	com/sun/corba/se/impl/encoding/MarshalInputStream.java \
 	com/sun/corba/se/impl/encoding/MarshalOutputStream.java \
--- a/make/com/sun/corba/minclude/com_sun_corba_se_impl_ior.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_impl_ior.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -63,6 +63,7 @@
 	com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.java \
 	com/sun/corba/se/impl/ior/iiop/IIOPProfileTemplateImpl.java \
 	com/sun/corba/se/impl/ior/iiop/JavaCodebaseComponentImpl.java \
+	com/sun/corba/se/impl/ior/iiop/JavaSerializationComponent.java \
 	com/sun/corba/se/impl/ior/iiop/MaxStreamFormatVersionComponentImpl.java \
 	com/sun/corba/se/impl/ior/iiop/RequestPartitioningComponentImpl.java \
 	com/sun/corba/se/impl/ior/iiop/ORBTypeComponentImpl.java
--- a/make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -27,6 +27,7 @@
 	com/sun/corba/se/impl/orbutil/CacheTable.java \
 	com/sun/corba/se/impl/orbutil/CorbaResourceUtil.java \
 	com/sun/corba/se/impl/orbutil/DenseIntMapImpl.java \
+	com/sun/corba/se/impl/orbutil/GetPropertyAction.java \
 	com/sun/corba/se/impl/orbutil/HexOutputStream.java \
 	com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java \
 	com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java \
@@ -76,6 +77,7 @@
 	com/sun/corba/se/impl/copyobject/FallbackObjectCopierImpl.java \
 	com/sun/corba/se/impl/copyobject/ORBStreamObjectCopierImpl.java \
 	com/sun/corba/se/impl/copyobject/ReferenceObjectCopierImpl.java \
+	com/sun/corba/se/impl/copyobject/JavaStreamObjectCopierImpl.java \
 	com/sun/corba/se/impl/orbutil/graph/Node.java \
 	com/sun/corba/se/impl/orbutil/graph/NodeData.java \
 	com/sun/corba/se/impl/orbutil/graph/Graph.java \
--- a/make/com/sun/corba/minclude/com_sun_corba_se_impl_protocol.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_impl_protocol.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -63,6 +63,7 @@
 	com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_0.java \
 	com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_1.java \
 	com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_2.java \
+	com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyOrReplyMessage.java \
 	com/sun/corba/se/impl/protocol/giopmsgheaders/Message.java \
 	com/sun/corba/se/impl/protocol/giopmsgheaders/MessageBase.java \
 	com/sun/corba/se/impl/protocol/giopmsgheaders/MessageHandler.java \
--- a/make/com/sun/corba/minclude/com_sun_corba_se_spi_legacy_interceptor.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_spi_legacy_interceptor.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -29,6 +29,7 @@
 
 com_sun_corba_se_spi_legacy_interceptor_java = \
 	com/sun/corba/se/spi/legacy/interceptor/IORInfoExt.java \
+	com/sun/corba/se/spi/legacy/interceptor/ORBInitInfoExt.java \
 	com/sun/corba/se/spi/legacy/interceptor/RequestInfoExt.java \
 	com/sun/corba/se/spi/legacy/interceptor/UnknownType.java
 
--- a/make/com/sun/corba/minclude/com_sun_corba_se_spi_monitoring.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_spi_monitoring.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -35,5 +35,6 @@
 	com/sun/corba/se/spi/monitoring/MonitoredObjectFactory.java \
 	com/sun/corba/se/spi/monitoring/MonitoredAttribute.java \
 	com/sun/corba/se/spi/monitoring/MonitoredAttributeInfoFactory.java \
+	com/sun/corba/se/spi/monitoring/MonitoringConstants.java \
 	com/sun/corba/se/spi/monitoring/MonitoringManager.java \
 	com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java 
--- a/make/com/sun/corba/minclude/com_sun_corba_se_spi_presentation_rmi.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_spi_presentation_rmi.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -27,6 +27,7 @@
 	com/sun/corba/se/spi/presentation/rmi/DynamicMethodMarshaller.java \
 	com/sun/corba/se/spi/presentation/rmi/DynamicStub.java \
 	com/sun/corba/se/spi/presentation/rmi/IDLNameTranslator.java \
+	com/sun/corba/se/spi/presentation/rmi/PresentationDefaults.java \
 	com/sun/corba/se/spi/presentation/rmi/PresentationManager.java \
 	com/sun/corba/se/spi/presentation/rmi/StubAdapter.java
 
--- a/make/com/sun/corba/minclude/com_sun_corba_se_spi_transport.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/com_sun_corba_se_spi_transport.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -26,6 +26,7 @@
 com_sun_corba_se_spi_transport_java = \
 	com/sun/corba/se/spi/transport/CorbaAcceptor.java \
 	com/sun/corba/se/spi/transport/CorbaConnection.java \
+	com/sun/corba/se/spi/transport/CorbaConnectionCache.java \
 	com/sun/corba/se/spi/transport/CorbaContactInfo.java \
 	com/sun/corba/se/spi/transport/CorbaContactInfoList.java \
 	com/sun/corba/se/spi/transport/CorbaContactInfoListFactory.java \
--- a/make/com/sun/corba/minclude/org_omg_CosNaming.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/org_omg_CosNaming.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -47,6 +47,7 @@
 	org/omg/CosNaming/NamingContext.java \
 	org/omg/CosNaming/NamingContextHelper.java \
 	org/omg/CosNaming/NamingContextHolder.java \
+	org/omg/CosNaming/NamingContextOperations.java \
 	org/omg/CosNaming/_NamingContextStub.java \
 	org/omg/CosNaming/NamingContextPackage/AlreadyBound.java \
 	org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.java \
--- a/make/com/sun/corba/minclude/org_omg_DynamicAny.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/org_omg_DynamicAny.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -47,6 +47,10 @@
 	org/omg/DynamicAny/DynUnionOperations.java \
 	org/omg/DynamicAny/DynValue.java \
 	org/omg/DynamicAny/DynValueOperations.java \
+	org/omg/DynamicAny/DynValueBox.java \
+	org/omg/DynamicAny/DynValueBoxOperations.java \
+	org/omg/DynamicAny/DynValueCommon.java \
+	org/omg/DynamicAny/DynValueCommonOperations.java \
 	org/omg/DynamicAny/NameDynAnyPair.java \
 	org/omg/DynamicAny/NameValuePair.java \
 	org/omg/DynamicAny/DynAnyPackage/InvalidValue.java \
@@ -70,8 +74,16 @@
 	org/omg/DynamicAny/DynSequenceHelper.java \
 	org/omg/DynamicAny/NameDynAnyPairSeqHelper.java \
 	org/omg/DynamicAny/NameValuePairHelper.java \
-	org/omg/DynamicAny/NameValuePairSeqHelper.java 
-
+	org/omg/DynamicAny/NameValuePairSeqHelper.java  \
+	org/omg/DynamicAny/_DynAnyFactoryStub.java \
+	org/omg/DynamicAny/_DynAnyStub.java \
+	org/omg/DynamicAny/_DynArrayStub.java \
+	org/omg/DynamicAny/_DynEnumStub.java \
+	org/omg/DynamicAny/_DynFixedStub.java \
+	org/omg/DynamicAny/_DynSequenceStub.java \
+	org/omg/DynamicAny/_DynStructStub.java \
+	org/omg/DynamicAny/_DynUnionStub.java \
+	org/omg/DynamicAny/_DynValueStub.java
 
 DYNANY_HELP_HOLD_java = \
 	org/omg/DynamicAny/AnySeqHolder.java \
--- a/make/com/sun/corba/minclude/org_omg_PortableInterceptor.jmk	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/minclude/org_omg_PortableInterceptor.jmk	Fri Jan 30 17:10:04 2009 -0800
@@ -106,6 +106,7 @@
 	org/omg/IOP/CodecPackage/TypeMismatchHelper.java \
 	org/omg/IOP/ENCODING_CDR_ENCAPS.java \
 	org/omg/IOP/Encoding.java \
+	org/omg/IOP/ExceptionDetailMessage.java \
 	org/omg/Dynamic/Parameter.java 
 
 # Helper and Holder files to be removed:
--- a/make/com/sun/corba/se/sources/Makefile	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/com/sun/corba/se/sources/Makefile	Fri Jan 30 17:10:04 2009 -0800
@@ -46,6 +46,8 @@
 include $(CORBA_JMK_DIRECTORY)com_sun_corba_se_PortableActivationIDL.jmk
 include $(CORBA_JMK_DIRECTORY)com_sun_corba_se_impl_logging.jmk
 
+FILES_java += com/sun/corba/se/org/omg/CORBA/ORB.java
+
 #
 # Dirs
 #
--- a/make/javax/xa/Makefile	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/javax/xa/Makefile	Fri Jan 30 17:10:04 2009 -0800
@@ -35,7 +35,7 @@
 #
 # Files to compile
 #
-AUTO_FILES_JAVA_DIRS = javax/transaction/xa
+AUTO_FILES_JAVA_DIRS = javax/transaction
 
 #
 # Rules
--- a/make/org/omg/CORBA/Makefile	Fri Jan 30 17:05:30 2009 -0800
+++ b/make/org/omg/CORBA/Makefile	Fri Jan 30 17:10:04 2009 -0800
@@ -47,8 +47,8 @@
 endif
 
 FILES_java = \
-        $(ORG_OMG_SENDINGCONTEXT_java) \
-        $(ORG_OMG_CORBA_2_3_java) \
+        $(org_omg_SendingContext_java) \
+        $(org_omg_CORBA_2_3_java) \
         $(ORG_OMG_CORBA_java)
 
 #
--- a/src/share/classes/com/sun/corba/se/impl/encoding/BufferManagerReadStream.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/encoding/BufferManagerReadStream.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2003 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2008 Sun Microsystems, Inc.  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
@@ -44,6 +44,7 @@
     // We should convert endOfStream to a final static dummy end node
     private boolean endOfStream = true;
     private BufferQueue fragmentQueue = new BufferQueue();
+    private long FRAGMENT_TIMEOUT = 60000;
 
     // REVISIT - This should go in BufferManagerRead. But, since
     //           BufferManagerRead is an interface. BufferManagerRead
@@ -111,9 +112,16 @@
                     throw wrapper.endOfStream() ;
                 }
 
+                boolean interrupted = false;
                 try {
-                    fragmentQueue.wait();
-                } catch (InterruptedException e) {}
+                    fragmentQueue.wait(FRAGMENT_TIMEOUT);
+                } catch (InterruptedException e) {
+                    interrupted = true;
+                }
+
+                if (!interrupted && fragmentQueue.size() == 0) {
+                    throw wrapper.bufferReadManagerTimeout();
+                }
 
                 if (receivedCancel) {
                     throw new RequestCanceledException(cancelReqId);
--- a/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2004 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2008 Sun Microsystems, Inc.  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
@@ -153,22 +153,22 @@
                 desc = new ObjectStreamClass(cl, superdesc,
                                              serializable, externalizable);
             }
+            // Must always call init.  See bug 4488137.  This code was
+            // incorrectly changed to return immediately on a non-null
+            // cache result.  That allowed threads to gain access to
+            // unintialized instances.
+            //
+            // History: Note, the following init() call was originally within 
+            // the synchronization block, as it currently is now. Later, the 
+            // init() call was moved outside the synchronization block, and 
+            // the init() method used a private member variable lock, to 
+            // avoid performance problems. See bug 4165204. But that lead to 
+            // a deadlock situation, see bug 5104239. Hence, the init() method 
+            // has now been moved back into the synchronization block. The 
+            // right approach to solving these problems would be to rewrite 
+            // this class, based on the latest java.io.ObjectStreamClass. 
+            desc.init();
         }
-
-        // Must always call init.  See bug 4488137.  This code was
-        // incorrectly changed to return immediately on a non-null
-        // cache result.  That allowed threads to gain access to
-        // unintialized instances.
-        //
-        // All threads must sync on the member variable lock
-        // and check the initialization state.
-        //
-        // Another possibility is to continue to synchronize on the
-        // descriptorFor array, but that leads to poor performance
-        // (see bug 4165204 "ObjectStreamClass can hold global lock
-        // for a very long time").
-        desc.init();
-
         return desc;
     }
 
--- a/src/share/classes/com/sun/corba/se/impl/oa/poa/POAFactory.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/oa/poa/POAFactory.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2004 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2002-2007 Sun Microsystems, Inc.  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
@@ -76,6 +76,7 @@
     private ORB orb ;
     private POASystemException wrapper ;
     private OMGSystemException omgWrapper ;
+    private boolean isShuttingDown = false;
 
     public POASystemException getWrapper()
     {
@@ -166,6 +167,7 @@
         // pm.deactivate removes itself from poaManagers!
         Iterator managers = null ;
         synchronized (this) {
+	    isShuttingDown = true ;
             managers = (new HashSet(poaManagers)).iterator();
         }
 
@@ -208,9 +210,15 @@
             ClosureFactory.makeFuture( rpClosure ) ) ;
     }
 
+
     public synchronized POA getRootPOA()
     {
         if (rootPOA == null) {
+	    // See if we are trying to getRootPOA while shutting down the ORB.
+	    if (isShuttingDown) {
+		throw omgWrapper.noObjectAdaptor( ) ;
+	    }
+
             try {
                 Object obj = orb.resolve_initial_references(
                     ORBConstants.ROOT_POA_NAME ) ;
--- a/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2002-2007 Sun Microsystems, Inc.  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
@@ -185,7 +185,6 @@
 
     private java.lang.Object runObj = new java.lang.Object();
     private java.lang.Object shutdownObj = new java.lang.Object();
-    private java.lang.Object waitForCompletionObj = new java.lang.Object();
     private static final byte STATUS_OPERATING = 1;
     private static final byte STATUS_SHUTTING_DOWN = 2;
     private static final byte STATUS_SHUTDOWN = 3;
@@ -194,7 +193,6 @@
 
     // XXX Should we move invocation tracking to the first level server dispatcher?
     private java.lang.Object invocationObj = new java.lang.Object();
-    private int numInvocations = 0;
 
     // thread local variable to store a boolean to detect deadlock in
     // ORB.shutdown(true).
@@ -1245,37 +1243,48 @@
 
     public void shutdown(boolean wait_for_completion)
     {
-        synchronized (this) {
-            checkShutdownState();
+        // to wait for completion, we would deadlock, so throw a standard
+        // OMG exception.
+        if (wait_for_completion && ((Boolean)isProcessingInvocation.get()).booleanValue()) {
+	    throw omgWrapper.shutdownWaitForCompletionDeadlock() ;
         }
 
-        // Avoid more than one thread performing shutdown at a time.
-        synchronized (shutdownObj) {
-            checkShutdownState();
-            // This is to avoid deadlock
-            if (wait_for_completion &&
-                isProcessingInvocation.get() == Boolean.TRUE) {
-                throw omgWrapper.shutdownWaitForCompletionDeadlock() ;
-            }
+        boolean doShutdown = false ;
+
+        synchronized (this) {
+	    checkShutdownState() ;
 
-            status = STATUS_SHUTTING_DOWN;
-            // XXX access to requestDispatcherRegistry should be protected
-            // by the ORBImpl instance monitor, but is not here in the
-            // shutdownServants call.
-            shutdownServants(wait_for_completion);
-            if (wait_for_completion) {
-                synchronized ( waitForCompletionObj ) {
-                    while (numInvocations > 0) {
-                        try {
-                            waitForCompletionObj.wait();
-                        } catch (InterruptedException ex) {}
-                    }
-                }
-            }
-            synchronized ( runObj ) {
-                runObj.notifyAll();
-            }
-            status = STATUS_SHUTDOWN;
+	    if (status == STATUS_SHUTTING_DOWN) {
+	        if (!wait_for_completion)
+		// If we are already shutting down and don't want
+		// to wait, nothing to do: return.
+		return ;
+	    } else {
+	        // The ORB status was STATUS_OPERATING, so start the shutdown.
+	        status = STATUS_SHUTTING_DOWN ;
+	        doShutdown = true ;
+	    }
+        }
+	
+        // At this point, status is SHUTTING_DOWN.
+        // All shutdown calls with wait_for_completion == true must synchronize
+        // here.  Only the first call will be made with doShutdown == true.
+        synchronized (shutdownObj) {
+	    if (doShutdown) {
+	        // shutdownServants will set all POAManagers into the
+	        // INACTIVE state, causing request to be rejected.
+	        // If wait_for_completion is true, this will not return until
+	        // all invocations have completed.
+	        shutdownServants(wait_for_completion);
+    
+	        synchronized (runObj) {
+		    runObj.notifyAll();
+	        }
+	    	
+	        synchronized (this) {
+		    status = STATUS_SHUTDOWN;
+	        }
+	    }
         }
     }
 
@@ -1314,23 +1323,13 @@
     {
         synchronized (invocationObj) {
             isProcessingInvocation.set(Boolean.TRUE);
-            numInvocations++;
         }
     }
 
     public void finishedDispatch()
     {
         synchronized (invocationObj) {
-            numInvocations--;
             isProcessingInvocation.set(Boolean.FALSE);
-            if (numInvocations == 0) {
-                synchronized (waitForCompletionObj) {
-                    waitForCompletionObj.notifyAll();
-                }
-            } else if (numInvocations < 0) {
-                throw wrapper.numInvocationsAlreadyZero(
-                    CompletionStatus.COMPLETED_YES ) ;
-            }
         }
     }
 
@@ -1341,12 +1340,24 @@
      */
     public synchronized void destroy()
     {
-        if (status == STATUS_OPERATING) {
+	boolean shutdownFirst = false ;
+
+	synchronized (this) {
+	    shutdownFirst = (status == STATUS_OPERATING) ;
+	}
+
+	if (shutdownFirst) {
             shutdown(true);
         }
-        getCorbaTransportManager().close();
-        getPIHandler().destroyInterceptors() ;
-        status = STATUS_DESTROYED;
+
+        synchronized (this) {
+	    if (status < STATUS_DESTROYED) {
+		getCorbaTransportManager().close();
+		getPIHandler().destroyInterceptors() ;
+		status = STATUS_DESTROYED;
+	    }
+	}
+
     }
 
     /**
--- a/src/share/classes/com/sun/corba/se/impl/orb/ORBSingleton.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/orb/ORBSingleton.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2004 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2006 Sun Microsystems, Inc.  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
@@ -135,7 +135,7 @@
 public class ORBSingleton extends ORB
 {
     // This is used to support read_Object.
-    private static ORB fullORB;
+    private ORB fullORB;
     private static PresentationManager.StubFactoryFactory staticStubFactoryFactory =
         PresentationDefaults.getStaticStubFactoryFactory() ;
 
--- a/src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2004 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2006 Sun Microsystems, Inc.  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
@@ -806,25 +806,6 @@
         return result ;
     }
 
-    public static void setDaemon(Thread thread)
-    {
-        // Catch exceptions since setDaemon can cause a
-        // security exception to be thrown under netscape
-        // in the Applet mode
-        final Thread finalThread = thread;
-        try {
-            AccessController.doPrivileged(new PrivilegedAction() {
-                    public java.lang.Object run() {
-                        finalThread.setDaemon(true);
-                        return null;
-                    }
-                });
-        } catch (Exception e) {
-            // REVISIT: Object to get static method. Ignore it.
-            dprint(new Object(), "setDaemon: Exception: " + e);
-        }
-    }
-
     public static String operationNameAndRequestId(CorbaMessageMediator m)
     {
         return "op/" + m.getOperationName() + " id/" + m.getRequestId();
--- a/src/share/classes/com/sun/corba/se/impl/resolver/INSURLOperationImpl.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/resolver/INSURLOperationImpl.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2004 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2007 Sun Microsystems, Inc.  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
@@ -53,7 +53,8 @@
 import com.sun.corba.se.spi.resolver.Resolver;
 
 import com.sun.corba.se.impl.encoding.EncapsInputStream;
-import com.sun.corba.se.impl.logging.ORBUtilSystemException ;
+import com.sun.corba.se.impl.logging.ORBUtilSystemException;
+import com.sun.corba.se.impl.logging.OMGSystemException;
 import com.sun.corba.se.impl.naming.namingutil.INSURLHandler;
 import com.sun.corba.se.impl.naming.namingutil.IIOPEndpointInfo;
 import com.sun.corba.se.impl.naming.namingutil.INSURL;
@@ -76,6 +77,7 @@
 {
     ORB orb;
     ORBUtilSystemException wrapper ;
+    OMGSystemException omgWrapper ;
     Resolver bootstrapResolver ;
 
     // Root Naming Context for default resolution of names.
@@ -87,9 +89,11 @@
 
     public INSURLOperationImpl( ORB orb, Resolver bootstrapResolver )
     {
-        this.orb = orb ;
-        wrapper = ORBUtilSystemException.get( orb,
-            CORBALogDomains.ORB_RESOLVER ) ;
+	this.orb = orb ;
+	wrapper = ORBUtilSystemException.get( orb,
+	    CORBALogDomains.ORB_RESOLVER ) ;
+	omgWrapper = OMGSystemException.get( orb,
+	    CORBALogDomains.ORB_RESOLVER ) ;
         this.bootstrapResolver = bootstrapResolver ;
     }
 
@@ -126,6 +130,8 @@
                 return getIORFromString( str ) ;
             else {
                 INSURL insURL = insURLHandler.parseURL( str ) ;
+		if (insURL == null)
+		    throw omgWrapper.soBadSchemeName() ;
                 return resolveINSURL( insURL ) ;
             }
         }
--- a/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2001-2004 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2001-2007 Sun Microsystems, Inc.  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
@@ -1057,7 +1057,9 @@
 
             // IIOPOutputStream will cleanup the connection info when it
             // sees this exception.
-            throw wrapper.writeErrorSend(e1) ;
+            SystemException exc = wrapper.writeErrorSend(e1); 
+            purgeCalls(exc, false, true); 
+            throw exc; 
         }
     }
 
--- a/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc	Fri Jan 30 17:10:04 2009 -0800
@@ -1,6 +1,6 @@
 ;
 
-; Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
+; Copyright 2003-2008 Sun Microsystems, Inc.  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
@@ -144,6 +144,8 @@
 	     15 WARNING "Read of full message failed : bytes requested = {0} bytes read = {1} max wait time = {2} total time spent waiting = {3}")
 	    (CREATE_LISTENER_FAILED 
 	     16 SEVERE "Unable to create listener thread on the specified port: {0}")
+	    (BUFFER_READ_MANAGER_TIMEOUT
+	     17 WARNING "Timeout while reading data in buffer manager")
 	    )
 	(DATA_CONVERSION
 	    (BAD_STRINGIFIED_IOR_LEN 1  WARNING "A character did not map to the transmission code set")
--- a/src/share/classes/com/sun/tools/corba/se/idl/Parser.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/com/sun/tools/corba/se/idl/Parser.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2004 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1999-2007 Sun Microsystems, Inc.  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
@@ -2086,8 +2086,8 @@
 
     if (token.type == Token.LeftBrace) {
       repIDStack.push(((IDLID)repIDStack.peek ()).clone ()) ;
+      structEntry = makeStructEntry( name, entry, false ) ;
       ((IDLID)repIDStack.peek ()).appendToName (name);
-      structEntry = makeStructEntry( name, entry, false ) ;
       prep.openScope (structEntry);
       match (Token.LeftBrace) ;
       member (structEntry) ;
@@ -2174,8 +2174,8 @@
 
     if (token.type == Token.Switch) {
       repIDStack.push (((IDLID)repIDStack.peek ()).clone ());
-      ((IDLID)repIDStack.peek ()).appendToName (name);
       unionEntry = makeUnionEntry( name, entry, false ) ;
+      ((IDLID)repIDStack.peek ()).appendToName (name); 
       match (Token.Switch);
       match (Token.LeftParen);
       unionEntry.type (switchTypeSpec (unionEntry));
@@ -2641,8 +2641,8 @@
   private void exceptDcl (SymtabEntry entry) throws IOException, ParseException
   {
     match (Token.Exception);
+    repIDStack.push (((IDLID)repIDStack.peek ()).clone ());
     ExceptionEntry exceptEntry = stFactory.exceptionEntry (entry, (IDLID)repIDStack.peek ());
-    repIDStack.push (((IDLID)repIDStack.peek ()).clone ());
     ((IDLID)repIDStack.peek ()).appendToName (token.name);
     exceptEntry.sourceFile (scanner.fileEntry ());
     // Comment must immediately precede "exception" keyword
--- a/src/share/classes/org/omg/CORBA/ORB.java	Fri Jan 30 17:05:30 2009 -0800
+++ b/src/share/classes/org/omg/CORBA/ORB.java	Fri Jan 30 17:10:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1995-2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1995-2006 Sun Microsystems, Inc.  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
@@ -289,7 +289,7 @@
      *
      * @return the singleton ORB
      */
-    public static ORB init() {
+    public static synchronized ORB init() {
         if (singleton == null) {
             String className = getSystemProperty(ORBSingletonClassKey);
             if (className == null)