Mercurial > hg > truffle
view src/share/tools/ProjectCreator/FileTreeCreator.java @ 17716:cdb71841f4bc
6498581: ThreadInterruptTest3 produces wrong output on Windows
Summary: There is race condition between os::interrupt and os::is_interrupted on Windows. In JVM_Sleep(Thread.sleep), check if thread gets interrupted, it may see interrupted but not really interrupted so cause spurious waking up (early return from sleep). Fix by checking if interrupt event really gets set thus prevent false return. For intrinsic of _isInterrupted, on Windows, go fastpath only on bit not set.
Reviewed-by: acorn, kvn
Contributed-by: david.holmes@oracle.com, yumin.qi@oracle.com
author | minqi |
---|---|
date | Wed, 26 Feb 2014 15:20:41 -0800 |
parents | bd0e82136b03 |
children |
line wrap: on
line source
import java.nio.file.FileSystems; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.util.HashSet; import java.util.Stack; import java.util.Vector; public class FileTreeCreator extends SimpleFileVisitor<Path> { Path vcProjLocation; Path startDir; final int startDirLength; Stack<DirAttributes> attributes = new Stack<DirAttributes>(); Vector<BuildConfig> allConfigs; WinGammaPlatform wg; WinGammaPlatformVC10 wg10; public FileTreeCreator(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatform wg) { super(); this.wg = wg; if (wg instanceof WinGammaPlatformVC10) { wg10 = (WinGammaPlatformVC10)wg; } this.allConfigs = allConfigs; this.startDir = startDir; startDirLength = startDir.toAbsolutePath().toString().length(); vcProjLocation = FileSystems.getDefault().getPath(allConfigs.firstElement().get("BuildSpace")); attributes.push(new DirAttributes()); } public class DirAttributes { private HashSet<BuildConfig> ignores; private HashSet<BuildConfig> disablePch; public DirAttributes() { ignores = new HashSet<BuildConfig>(); disablePch = new HashSet<BuildConfig>(); } public DirAttributes(HashSet<BuildConfig> excludes2, HashSet<BuildConfig> disablePch2) { ignores = excludes2; disablePch = disablePch2; } @SuppressWarnings("unchecked") public DirAttributes clone() { return new DirAttributes((HashSet<BuildConfig>)this.ignores.clone(), (HashSet<BuildConfig>)this.disablePch.clone()); } public void setIgnore(BuildConfig conf) { ignores.add(conf); } public boolean hasIgnore(BuildConfig cfg) { return ignores.contains(cfg); } public void removeFromIgnored(BuildConfig cfg) { ignores.remove(cfg); } public void setDisablePch(BuildConfig conf) { disablePch.add(conf); } public boolean hasDisablePch(BuildConfig cfg) { return disablePch.contains(cfg); } public void removeFromDisablePch(BuildConfig cfg) { disablePch.remove(cfg); } } }