[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    Re: [OpenJDK 2D-Dev] RFR: 8262731: [macOS] Exception from "Printable.print" is swallowed during "Pri
From:       Anton Litvinov <alitvinov () openjdk ! java ! net>
Date:       2021-05-31 14:00:22
Message-ID: oDC4-Rqx1z7VdypIPW3pyk4vIuxz9XoOdEDR57K-pG0=.e719dbf5-b362-42ff-a662-428c1c821306 () github ! com
[Download RAW message or body]

On Sun, 30 May 2021 18:11:18 GMT, Phil Race <prr@openjdk.org> wrote:

> > Anton Litvinov has updated the pull request incrementally with one additional \
> > commit since the last revision: 
> > Second version of the fix
> 
> test/jdk/java/awt/print/PrinterJob/ExceptionFromPrintableIsIgnoredTest.java line \
> 120: 
> > 118:                     (exceptionType == TestExceptionType.PE)) ||
> > 119:                 ((printEx instanceof RuntimeException) &&
> > 120:                     (exceptionType == TestExceptionType.RE))) {
> 
> 1) I am fairly sure that I tested this case on Windows and nothing caught it so \
> does this test work on Windows ? 
> 2) I raised the question / suggestion that should we not wrap these in a \
> PrinterException ?  It at least needs to be thought through.

1. The test does not fail on Windows in all 4 tested scenarios. You can run this \
regression test on Windows and you will see in the test report in the test output \
that the test successfully throws the required "PrinterException" or \
"RuntimeException" from "java.awt.print.Printable.print​(Graphics, PageFormat, \
int)" and that the test successfully catches this "PrinterException" or \
"RuntimeException" and prints out it to "System.out" "PrintStream" in the test method \
"ExceptionFromPrintableIsIgnoredTest.runTest(final TestExceptionType)".

Line 115    printEx.printStackTrace(System.out);

This line in the test is done exactly as the evidence that the exception was really \
propagated from the method "PrinterJob.print()" and caught by the test. I verified \
that it is "true" on macOS, Windows, Linux.

I reported this in the code review and in JBS bug record itself that in JDK 17 and in \
JDK 8u291 and even in JDK 8-b132 on Windows and on Linux "PrinterJob.print()", which \
is called on EDT, propagates "PrinterException" and "RuntimeException" which are \
thrown from "Printable.print​(Graphics, PageFormat, int)" method. If you still do \
not trust this, then I suggest you just to recheck it yourself by any trustworthy \
mean in addition to this regression test and the purely manual test case \
"ExceptionFromPrintableIsIgnored.java" attached to the bug record.

2. By current moment in JDK versions on Windows and Linux the "RuntimeException" \
thrown from "Printable.print​(Graphics, PageFormat, int)" has been propagated \
through "PrinterJob.print()" as is without wrapping it into "PrinterException", as my \
experiments show even in JDK 8-b132 and in currently latest GA release of JDK 8 and \
in JDK 17.  
From my viewpoint not wrapping "RuntimeException" into "PrinterException" and \
propagating "RuntimeException" through "PrinterJob.print()" will just bring behavior \
of JDK on macOS into correspondence with existing behavior of JDK on Windows and \
Linux. If we wrap "RuntimeException" into "PrinterException" on macOS, then at some \
point in time somebody will need to change JDK code for Windows and Linux to also do \
the same wrapping of the exception which is currently not done. I do not insist on \
any variant.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4036


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic