On Fri, 14 May 2021 18:37:46 GMT, Anton Litvinov <alitvi...@openjdk.org> wrote:
> Hello, > > Could you please review the following fix for the bug specific to macOS. The > bug consists in the fact that if the method > "java.awt.print.Printable.print​(Graphics, PageFormat, int)" throws > "java.awt.print.PrinterException" or "java.lang.RuntimeException" during the > call "java.awt.print.PrinterJob.print()", then the exception is caught and > ignored by JDK and a user cannot learn that printing failed and what caused > failure of printing, because "PrinterJob.print()" method does not throw > "PrinterException" or the occurred exception is not reported by JDK through > the error stream. > > ROOT CAUSE OF THE BUG: > The root cause of the bug is the fact that in the method > "sun.lwawt.macosx.CPrinterJob.printAndGetPageFormatArea(final Printable, > final Graphics, final PageFormat, final int)" from the file > "src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java" the > exception thrown during execution of the expression > > "int pageResult = printable.print(graphics, pageFormat, pageIndex);" > > is caught but is not returned to a developer by any mean or is not printed > out to the error stream. > > THE FIX: > The fix implements propagation of the occurred and caught exception to the > level of the user's code executing "PrinterJob.print()" method. Propagation > of the exception by storing it in the instance variable of "CPrinterJob" > object is implemented, because the engaged code always is executed: > - on 2 threads (non-EDT thread, EDT thread) in case when "PrinterJob.print()" > is called by the user on a non-EDT thread; > - on 3 threads (2 EDT threads, a temporary thread started by JDK to execute > "CPrinterJob._safePrintLoop(long, long );") when "PrinterJob.print()" is > called on EDT thread. > > The regression test which is part of the fix was also successfully executed > on MS Windows OS and Linux OS. > > Thank you, > Anton This pull request has now been integrated. Changeset: c0b4407d Author: Anton Litvinov <alitvi...@openjdk.org> URL: https://git.openjdk.java.net/jdk/commit/c0b4407d09a7bf9f15553dc5344b1e354b150d57 Stats: 169 lines in 2 files changed: 160 ins; 0 del; 9 mod 8262731: [macOS] Exception from "Printable.print" is swallowed during "PrinterJob.print" Reviewed-by: prr ------------- PR: https://git.openjdk.java.net/jdk/pull/4036