# HG changeset patch # User egahlin # Date 1385037995 -3600 # Node ID 85be6fd8b7be5b562c3f5ff2e49b5d5db2ec7dee # Parent ccd19d2dc324991cf7b09c89fededa90e722544d 6402201: ProcessAttachTest.sh needs better synchronization Reviewed-by: alanb diff -r ccd19d2dc324 -r 85be6fd8b7be jdk/test/ProblemList.txt --- a/jdk/test/ProblemList.txt Thu Nov 21 11:36:39 2013 +0000 +++ b/jdk/test/ProblemList.txt Thu Nov 21 13:46:35 2013 +0100 @@ -304,9 +304,6 @@ # Filed 6653793 com/sun/jdi/RedefineCrossEvent.java generic-all -# Filed 6402201 -com/sun/jdi/ProcessAttachTest.sh generic-all - ############################################################################ # jdk_util diff -r ccd19d2dc324 -r 85be6fd8b7be jdk/test/com/sun/jdi/ProcessAttachDebuggee.java --- a/jdk/test/com/sun/jdi/ProcessAttachDebuggee.java Thu Nov 21 11:36:39 2013 +0000 +++ b/jdk/test/com/sun/jdi/ProcessAttachDebuggee.java Thu Nov 21 13:46:35 2013 +0100 @@ -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 @@ 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 -r ccd19d2dc324 -r 85be6fd8b7be jdk/test/com/sun/jdi/ProcessAttachTest.sh --- a/jdk/test/com/sun/jdi/ProcessAttachTest.sh Thu Nov 21 11:36:39 2013 +0000 +++ b/jdk/test/com/sun/jdi/ProcessAttachTest.sh Thu Nov 21 13:46:35 2013 +0100 @@ -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 @@ # 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}"