System.exit() forbidden by JT Harness in agentvm mode
Jonathan Gibbons
jonathan.gibbons at oracle.com
Tue Dec 10 08:47:52 PST 2013
Volker,
From the history books, initially there was only "samevm" and "othervm"
mode and "othervm" mode was the default.
"samevm" mode was problematic in the face of bad tests (especially bad
tests on Windows) and only the langtools test suite evolved to the point
where we recommended the use of "samevm" mode.
As a result, "agentvm" mode was added, which is <marketing-slogan>like
samevm, but better</marketing-slogan>. It has worked well for most
tests, but as you have noticed, does not work well if a test tries to
exit the JVM. Those tests need some amount of TLC if they are to
leverage "agentvm" mode.
You can use othervm.dirs in TEST.ROOT, but that was added as a
pragmatic, stop gap measure, to faciitate running most of the tests in
the faster "agentvm" mode, while allowing some older parts of the test
suite to continue running in the slower "othervm" world.
The core-libs team have led an effort to clean up the core-libs tests
and to provide the test/Makefile as a standard way of running the
tests. It seems like it is time to embark on a similar effort for the
client tests.
-- Jon
On 12/10/2013 07:37 AM, Volker Simonis wrote:
> Hi,
>
> when running the
> com/sun/java/swing/plaf/windows/8016551/bug8016551.java regression
> test with the newest version of jtreg (build from source) in agentvm
> mode I get the following error:
>
> ----------System.err:(33/2049)----------
> java.lang.reflect.InvocationTargetException
> at java.awt.EventQueue.invokeAndWait(EventQueue.java:1300)
> at java.awt.EventQueue.invokeAndWait(EventQueue.java:1275)
> at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1350)
> at bug8016551.main(bug8016551.java:46)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:483)
> at com.sun.javatest.regtest.MainAction$SameVMRunnable.run(MainAction.java:754)
> at java.lang.Thread.run(Thread.java:744)
> Caused by: java.lang.SecurityException: System.exit() forbidden by JT Harness
> at com.sun.javatest.JavaTestSecurityManager.checkExit(JavaTestSecurityManager.java:117)
> at javax.swing.JFrame.setDefaultCloseOperation(JFrame.java:395)
> at bug8016551$1.run(bug8016551.java:57)
> at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
> at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
> at java.awt.EventQueue.access$400(EventQueue.java:97)
> at java.awt.EventQueue$3.run(EventQueue.java:697)
> at java.awt.EventQueue$3.run(EventQueue.java:691)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
> at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
> at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
> at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
> at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
> at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
>
> If the test is run in othervm mode it succeeds.
>
> I looked at this problem a litter loser and found out the following:
>
> - there are 99 test which use JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE)
> - they are in java/awt (15), javax/swing (79), sun/java2d (3),
> javax/imageio/plugins/gif/GifTransparencyTest.java
> (setDefaultCloseOperation present but never called) and
> com/sun/java/swing/plaf/windows/8016551/bug8016551.java
> - all test in java/awt and sun/java2d are always executed in othervm
> mode anyway (because of 'othervm.dirs=java/awt ..' in TEST.ROOT)
>
> Now I'm not sure if this security-exception is right at this place -
> i.e. if jtreg/jtharness work as expected here.
>
> If yes and if there's no option/workaround to switch this behaviour
> off, we should either add 'javax/swing' as well to the 'othervm.dirs'
> list in TEST.ROOT and explicitly flag the remain test to require
> othervm mode by adding the corresponding '@run main/othervm' tag to
> the java source file.
>
> If adding 'javax/swing' to 'othervm.dirs' is considered to general, we
> would have to explicitly flag each single test with '@run
> main/othervm'.
>
> What do you think?
>
> Volker
>
> PS: there are 208 test which call System.exit() directly. I haven't
> analysed them until now, but the same reasoning applies for them as
> well.
More information about the code-tools-dev
mailing list