diff --git a/remoting/src/main/java/hudson/remoting/RemoteClassLoader.java b/remoting/src/main/java/hudson/remoting/RemoteClassLoader.java index 4825a24add..7e283a0686 100644 --- a/remoting/src/main/java/hudson/remoting/RemoteClassLoader.java +++ b/remoting/src/main/java/hudson/remoting/RemoteClassLoader.java @@ -258,8 +258,7 @@ final class RemoteClassLoader extends URLClassLoader { private File makeResource(String name, byte[] image) throws IOException { - File tmpFile = File.createTempFile("hudson-remoting", ""); - tmpFile.delete(); + File tmpFile = createTempDir(); File resource = new File(tmpFile, name); resource.getParentFile().mkdirs(); @@ -272,6 +271,24 @@ final class RemoteClassLoader extends URLClassLoader { return resource; } + private File createTempDir() throws IOException { + // work around sun bug 6325169 on windows + // see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6325169 + int nRetry=0; + while (true) { + try { + File tmpFile = File.createTempFile("hudson-remoting", ""); + tmpFile.delete(); + tmpFile.mkdir(); + return tmpFile; + } catch (IOException e) { + if (nRetry++ < 100) + continue; + throw e; + } + } + } + /** * Prefetches the jar into this class loader. *