diff --git a/test/ProblemList.txt b/test/ProblemList.txt index 7c7c84ceb3269f6054a104fd3a0fab4e58a9779b..f9584473f0fdd8904ea33e261460aae2d3c24e2e 100644 --- a/test/ProblemList.txt +++ b/test/ProblemList.txt @@ -304,9 +304,6 @@ com/sun/jdi/SuspendThreadTest.java generic-all # Filed 6653793 com/sun/jdi/RedefineCrossEvent.java generic-all -# Filed 6402201 -com/sun/jdi/ProcessAttachTest.sh generic-all - ############################################################################ # jdk_util diff --git a/test/com/sun/jdi/ProcessAttachDebuggee.java b/test/com/sun/jdi/ProcessAttachDebuggee.java index feca088223858d0384c8bb7d62531e1839d0e1b8..3208b1551ee3a261096dfee146a5712b9cd1d50f 100644 --- a/test/com/sun/jdi/ProcessAttachDebuggee.java +++ b/test/com/sun/jdi/ProcessAttachDebuggee.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 @@ -29,6 +29,9 @@ */ import java.net.Socket; import java.net.ServerSocket; +import java.nio.file.CopyOption; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.io.File; import java.io.FileOutputStream; @@ -39,10 +42,12 @@ public class ProcessAttachDebuggee { int port = ss.getLocalPort(); // Write the port number to the given file - File f = new File(args[0]); - FileOutputStream fos = new FileOutputStream(f); - fos.write( Integer.toString(port).getBytes("UTF-8") ); - fos.close(); + File partial = new File(args[0] + ".partial"); + File portFile = new File(args[0]); + try (FileOutputStream fos = new FileOutputStream(partial)) { + fos.write( Integer.toString(port).getBytes("UTF-8") ); + } + Files.move(partial.toPath(), portFile.toPath(), StandardCopyOption.ATOMIC_MOVE); System.out.println("Debuggee bound to port: " + port); System.out.flush(); diff --git a/test/com/sun/jdi/ProcessAttachTest.sh b/test/com/sun/jdi/ProcessAttachTest.sh index d48ea5ec82871faaa24ab5c6fba591a946e1a3fd..10b5d50315486efa67a2777173c58f81216b17df 100644 --- a/test/com/sun/jdi/ProcessAttachTest.sh +++ b/test/com/sun/jdi/ProcessAttachTest.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 @@ -158,7 +158,17 @@ $JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \ # The debuggee is suspended and doesn't run until the debugger # disconnects. We have to give it time to write the port number # to ${PORTFILE} -sleep 10 + +echo "Waiting for port file to be written..." +attempts=0 +while true; do + sleep 1 + attempts=`expr $attempts + 1` + if [ -f ${PORTFILE} ]; then + break + fi + echo "Waiting $attempts second(s) ..." +done if [ $? != 0 ]; then failures=`expr $failures + 1`; fi stopDebuggee "${PORTFILE}"