7056731: Race condition in CORBA code causes re-use of ABORTed connections
Reviewed-by: lancea
This commit is contained in:
parent
e892fb5b1d
commit
b9fda6fcd8
@ -507,7 +507,8 @@ JDK_ALL_TARGETS += jdk_misc
|
||||
JDK_DEFAULT_TARGETS += jdk_misc
|
||||
jdk_misc: $(call TestDirs, \
|
||||
demo/jvmti demo/zipfs javax/naming javax/script \
|
||||
javax/smartcardio com/sun/jndi com/sun/xml sun/misc)
|
||||
javax/smartcardio com/sun/jndi com/sun/xml \
|
||||
com/sun/corba sun/misc)
|
||||
$(call RunAgentvmBatch)
|
||||
|
||||
# Stable agentvm testruns (minus items from PROBLEM_LIST)
|
||||
|
119
jdk/test/com/sun/corba/cachedSocket/7056731.sh
Normal file
119
jdk/test/com/sun/corba/cachedSocket/7056731.sh
Normal file
@ -0,0 +1,119 @@
|
||||
#
|
||||
# Copyright (c) 2012, 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
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
#
|
||||
# @test
|
||||
# @bug 7056731
|
||||
# @summary Race condition in CORBA code causes re-use of ABORTed connections
|
||||
#
|
||||
# @run shell 7056731.sh
|
||||
#
|
||||
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
PS=":"
|
||||
FS="/"
|
||||
;;
|
||||
Windows* | CYGWIN* )
|
||||
PS=";"
|
||||
FS="\\"
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "${TESTJAVA}" = "" ] ; then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
JAVA="${TESTJAVA}${FS}bin${FS}java"
|
||||
PORT=1052
|
||||
cp -r ${TESTSRC}${FS}*.java ${TESTSRC}${FS}Hello.idl .
|
||||
echo "Testing...please wait"
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}idlj -fall Hello.idl
|
||||
${TESTJAVA}${FS}bin${FS}javac *.java HelloApp/*.java
|
||||
|
||||
echo "starting orbd"
|
||||
${TESTJAVA}${FS}bin${FS}orbd -ORBInitialPort $PORT -ORBInitialHost localhost &
|
||||
ORB_PROC=$!
|
||||
sleep 2 #give orbd time to start
|
||||
echo "started orb"
|
||||
echo "starting server"
|
||||
${TESTJAVA}${FS}bin${FS}java -cp . HelloServer -ORBInitialPort $PORT -ORBInitialHost localhost &
|
||||
SERVER_PROC=$!
|
||||
sleep 2 #give server time to start
|
||||
echo "started server"
|
||||
echo "starting client (debug mode)"
|
||||
${TESTJAVA}${FS}bin${FS}java -cp . -agentlib:jdwp=transport=dt_socket,server=y,address=8000 HelloClient -ORBInitialPort $PORT -ORBInitialHost localhost > client.$$ 2>&1 &
|
||||
JVM_PROC=$!
|
||||
sleep 2 #give jvm/debugger/client time to start
|
||||
|
||||
echo "started client (debug mode)"
|
||||
echo "starting debugger and issuing commands"
|
||||
(sleep 2;
|
||||
echo "stop in com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.unregisterWaiter";
|
||||
sleep 2;
|
||||
echo "run";
|
||||
sleep 2;
|
||||
echo "cont";
|
||||
sleep 2;
|
||||
echo "cont";
|
||||
sleep 2;
|
||||
echo "cont";
|
||||
sleep 2;
|
||||
echo "suspend 1";
|
||||
sleep 2;
|
||||
kill -9 $SERVER_PROC &> /dev/null;
|
||||
sleep 2;
|
||||
echo "cont";
|
||||
sleep 2;
|
||||
echo "thread 1"
|
||||
sleep 2;
|
||||
echo "clear com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.unregisterWaiter"
|
||||
sleep 2;
|
||||
echo "resume 1";
|
||||
)| ${TESTJAVA}${FS}bin${FS}jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
|
||||
|
||||
sleep 5 # give time for Client to throw exception
|
||||
|
||||
# JVM_PROC should have exited but just in case, include it.
|
||||
kill -9 $ORB_PROC $JVM_PROC
|
||||
|
||||
grep "ORBUtilSystemException.writeErrorSend" client.$$
|
||||
result=$?
|
||||
if [ $result -eq 0 ]
|
||||
then
|
||||
echo "Failed"
|
||||
exitCode=1;
|
||||
else
|
||||
echo "Passed"
|
||||
exitCode=0
|
||||
fi
|
||||
|
||||
rm -rf out.$$ client.$$
|
||||
exit ${exitCode}
|
31
jdk/test/com/sun/corba/cachedSocket/Hello.idl
Normal file
31
jdk/test/com/sun/corba/cachedSocket/Hello.idl
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
module HelloApp
|
||||
{
|
||||
interface Hello
|
||||
{
|
||||
string sayHello();
|
||||
oneway void shutdown();
|
||||
};
|
||||
};
|
67
jdk/test/com/sun/corba/cachedSocket/HelloClient.java
Normal file
67
jdk/test/com/sun/corba/cachedSocket/HelloClient.java
Normal file
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import HelloApp.*;
|
||||
import org.omg.CosNaming.*;
|
||||
import org.omg.CosNaming.NamingContextPackage.*;
|
||||
import org.omg.CORBA.*;
|
||||
|
||||
public class HelloClient
|
||||
{
|
||||
static Hello helloImpl;
|
||||
|
||||
public static void main(String args[])
|
||||
{
|
||||
try{
|
||||
// create and initialize the ORB
|
||||
ORB orb = ORB.init(args, null);
|
||||
|
||||
// get the root naming context
|
||||
org.omg.CORBA.Object objRef =
|
||||
orb.resolve_initial_references("NameService");
|
||||
// Use NamingContextExt instead of NamingContext. This is
|
||||
// part of the Interoperable naming Service.
|
||||
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
|
||||
|
||||
// resolve the Object Reference in Naming
|
||||
String name = "Hello";
|
||||
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
|
||||
|
||||
System.out.println("Obtained a handle on server object: " + helloImpl);
|
||||
for (int i = 0; i < 2; i++) {
|
||||
try {
|
||||
System.out.println(helloImpl.sayHello());
|
||||
} catch (Exception e) {
|
||||
System.out.println("Exception: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
Thread.sleep(2000);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERROR : " + e) ;
|
||||
e.printStackTrace(System.out);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
97
jdk/test/com/sun/corba/cachedSocket/HelloServer.java
Normal file
97
jdk/test/com/sun/corba/cachedSocket/HelloServer.java
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import HelloApp.*;
|
||||
import org.omg.CosNaming.*;
|
||||
import org.omg.CosNaming.NamingContextPackage.*;
|
||||
import org.omg.CORBA.*;
|
||||
import org.omg.PortableServer.*;
|
||||
import org.omg.PortableServer.POA;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
class HelloImpl extends HelloPOA {
|
||||
private ORB orb;
|
||||
|
||||
public void setORB(ORB orb_val) {
|
||||
orb = orb_val;
|
||||
}
|
||||
|
||||
// implement sayHello() method
|
||||
public String sayHello() {
|
||||
return "\nHello world !!\n";
|
||||
}
|
||||
|
||||
// implement shutdown() method
|
||||
public void shutdown() {
|
||||
orb.shutdown(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class HelloServer {
|
||||
|
||||
public static void main(String args[]) {
|
||||
try{
|
||||
// create and initialize the ORB
|
||||
ORB orb = ORB.init(args, null);
|
||||
|
||||
// get reference to rootpoa & activate the POAManager
|
||||
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
|
||||
rootpoa.the_POAManager().activate();
|
||||
|
||||
// create servant and register it with the ORB
|
||||
HelloImpl helloImpl = new HelloImpl();
|
||||
helloImpl.setORB(orb);
|
||||
|
||||
// get object reference from the servant
|
||||
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
|
||||
Hello href = HelloHelper.narrow(ref);
|
||||
|
||||
// get the root naming context
|
||||
org.omg.CORBA.Object objRef =
|
||||
orb.resolve_initial_references("NameService");
|
||||
// Use NamingContextExt which is part of the Interoperable
|
||||
// Naming Service (INS) specification.
|
||||
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
|
||||
|
||||
// bind the Object Reference in Naming
|
||||
String name = "Hello";
|
||||
NameComponent path[] = ncRef.to_name( name );
|
||||
ncRef.rebind(path, href);
|
||||
|
||||
System.out.println("HelloServer ready and waiting ...");
|
||||
|
||||
// wait for invocations from clients
|
||||
while (true) {
|
||||
orb.run();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERROR: " + e);
|
||||
e.printStackTrace(System.out);
|
||||
}
|
||||
|
||||
System.out.println("HelloServer Exiting ...");
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user