ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/JSR166TestCase.java
(Generate patch)

Comparing jsr166/src/test/tck/JSR166TestCase.java (file contents):
Revision 1.149 by jsr166, Sat Oct 3 16:57:25 2015 UTC vs.
Revision 1.155 by jsr166, Sat Oct 3 19:59:49 2015 UTC

# Line 15 | Line 15 | import java.io.ObjectInputStream;
15   import java.io.ObjectOutputStream;
16   import java.lang.management.ManagementFactory;
17   import java.lang.management.ThreadInfo;
18 + import java.lang.management.ThreadMXBean;
19   import java.lang.reflect.Constructor;
20   import java.lang.reflect.Method;
21   import java.lang.reflect.Modifier;
# Line 460 | Line 461 | public class JSR166TestCase extends Test
461          } else {
462              return new TestSuite();
463          }
463
464      }
465  
466      // Delays for timing-dependent tests, in milliseconds.
# Line 518 | Line 518 | public class JSR166TestCase extends Test
518       * the same test have no effect.
519       */
520      public void threadRecordFailure(Throwable t) {
521 +        threadDump();
522          threadFailure.compareAndSet(null, t);
523      }
524  
# Line 528 | Line 529 | public class JSR166TestCase extends Test
529      void tearDownFail(String format, Object... args) {
530          String msg = toString() + ": " + String.format(format, args);
531          System.err.println(msg);
532 <        printAllStackTraces();
532 >        threadDump();
533          throw new AssertionFailedError(msg);
534      }
535  
# Line 597 | Line 598 | public class JSR166TestCase extends Test
598              fail(reason);
599          } catch (AssertionFailedError t) {
600              threadRecordFailure(t);
601 <            fail(reason);
601 >            throw t;
602          }
603      }
604  
# Line 777 | Line 778 | public class JSR166TestCase extends Test
778       * necessarily individually slow because they must block.
779       */
780      void testInParallel(Action ... actions) {
781 <        ExecutorService pool = Executors.newCachedThreadPool();
782 <        try {
781 >        try (PoolCloser<ExecutorService> poolCloser
782 >             = new PoolCloser<>(Executors.newCachedThreadPool())) {
783 >            ExecutorService pool = poolCloser.pool;
784              ArrayList<Future<?>> futures = new ArrayList<>(actions.length);
785              for (final Action action : actions)
786                  futures.add(pool.submit(new CheckedRunnable() {
# Line 791 | Line 793 | public class JSR166TestCase extends Test
793                  } catch (Exception ex) {
794                      threadUnexpectedException(ex);
795                  }
794        } finally {
795            joinPool(pool);
796          }
797      }
798  
799      /**
800       * A debugging tool to print all stack traces, as jstack does.
801 +     * Uninteresting threads are filtered out.
802       */
803 <    static void printAllStackTraces() {
804 <        for (ThreadInfo info :
805 <                 ManagementFactory.getThreadMXBean()
806 <                 .dumpAllThreads(true, true))
803 >    static void threadDump() {
804 >        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
805 >        System.err.println("------ stacktrace dump start ------");
806 >        for (ThreadInfo info : threadMXBean.dumpAllThreads(true, true)) {
807 >            String name = info.getThreadName();
808 >            if ("Signal Dispatcher".equals(name))
809 >                continue;
810 >            if ("Reference Handler".equals(name)
811 >                && info.getLockName().startsWith("java.lang.ref.Reference$Lock"))
812 >                continue;
813 >            if ("Finalizer".equals(name)
814 >                && info.getLockName().startsWith("java.lang.ref.ReferenceQueue$Lock"))
815 >                continue;
816              System.err.print(info);
817 +        }
818 +        System.err.println("------ stacktrace dump end ------");
819      }
820  
821      /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines