提交 10eb42ed 编写于 作者: A alanb

8023139: java/nio/file/WatchService/SensitivityModifier.java failing intermittently (win8)

Reviewed-by: alanb
Contributed-by: yiming.wang@oracle.com
上级 55b1de80
...@@ -54,7 +54,7 @@ public class SensitivityModifier { ...@@ -54,7 +54,7 @@ public class SensitivityModifier {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
static void doTest(Path top) throws Exception { static void doTest(Path top) throws Exception {
FileSystem fs = top.getFileSystem(); FileSystem fs = top.getFileSystem();
WatchService watcher = fs.newWatchService(); try (WatchService watcher = fs.newWatchService()) {
// create directories and files // create directories and files
int nDirs = 5 + rand.nextInt(20); int nDirs = 5 + rand.nextInt(20);
...@@ -84,30 +84,36 @@ public class SensitivityModifier { ...@@ -84,30 +84,36 @@ public class SensitivityModifier {
try (OutputStream out = Files.newOutputStream(file)) { try (OutputStream out = Files.newOutputStream(file)) {
out.write(new byte[100]); out.write(new byte[100]);
} }
System.out.println("Waiting for event...");
System.out.println("Waiting for event(s)...");
boolean eventReceived = false;
WatchKey key = watcher.take(); WatchKey key = watcher.take();
WatchEvent<?> event = key.pollEvents().iterator().next(); do {
for (WatchEvent<?> event: key.pollEvents()) {
if (event.kind() != ENTRY_MODIFY) if (event.kind() != ENTRY_MODIFY)
throw new RuntimeException("Unexpected event: " + event); throw new RuntimeException("Unexpected event: " + event);
Path name = ((WatchEvent<Path>)event).context(); Path name = ((WatchEvent<Path>)event).context();
if (!name.equals(file.getFileName())) if (name.equals(file.getFileName())) {
throw new RuntimeException("Unexpected context: " + name); eventReceived = true;
System.out.println("Event OK"); break;
}
// drain events (to avoid interference) }
do {
key.pollEvents();
key.reset(); key.reset();
key = watcher.poll(1, TimeUnit.SECONDS); key = watcher.poll(1, TimeUnit.SECONDS);
} while (key != null); } while (key != null && !eventReceived);
// we should have received at least one ENTRY_MODIFY event
if (eventReceived) {
System.out.println("Event OK");
} else {
throw new RuntimeException("No ENTRY_MODIFY event received for " + file);
}
// re-register the directories to force changing their sensitivity // re-register the directories to force changing their sensitivity
// level // level
register(dirs, watcher); register(dirs, watcher);
} }
}
// done
watcher.close();
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册