[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