> 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

Anton Litvinov has updated the pull request incrementally with one additional 
commit since the last revision:

  Second version of the fix

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/4036/files
  - new: https://git.openjdk.java.net/jdk/pull/4036/files/db2ce06b..47051517

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4036&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4036&range=00-01

  Stats: 86 lines in 2 files changed: 33 ins; 20 del; 33 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4036.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4036/head:pull/4036

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

Reply via email to