You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2015/06/07 11:33:34 UTC
svn commit: r1684008 -
/lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/codecs/TestCodecLoadingDeadlock.java
Author: uschindler
Date: Sun Jun 7 09:33:33 2015
New Revision: 1684008
URL: http://svn.apache.org/r1684008
Log:
LUCENE-6482: Fix Java 7, which has very limited Process API (I did not notice before, as I had Java 8 as default runtime)
Modified:
lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/codecs/TestCodecLoadingDeadlock.java
Modified: lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/codecs/TestCodecLoadingDeadlock.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/codecs/TestCodecLoadingDeadlock.java?rev=1684008&r1=1684007&r2=1684008&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/codecs/TestCodecLoadingDeadlock.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/codecs/TestCodecLoadingDeadlock.java Sun Jun 7 09:33:33 2015
@@ -25,6 +25,8 @@ import java.util.Set;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.apache.lucene.util.LuceneTestCase;
@@ -67,11 +69,20 @@ public class TestCodecLoadingDeadlock ex
pfName,
dvfName
).inheritIO().start();
- if (p.waitFor(30, TimeUnit.SECONDS)) {
- assertEquals("Process died abnormally", 0, p.waitFor());
- } else {
- p.destroyForcibly().waitFor();
+ final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("processKiller"));
+ final ScheduledFuture<?> f = scheduler.schedule(new Runnable() {
+ @Override
+ public void run() {
+ p.destroy();
+ }
+ }, 30, TimeUnit.SECONDS);
+ final int exitCode = p.waitFor();
+ scheduler.shutdownNow();
+ while (!scheduler.awaitTermination(1, TimeUnit.MINUTES));
+ if (f.isDone()) {
fail("Process did not exit after 30 secs -> classloader deadlock?");
+ } else {
+ assertEquals("Process died abnormally", 0, exitCode);
}
}