[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-2d-dev
Subject: [OpenJDK 2D-Dev] Integrated: 8262731: [macOS] Exception from "Printable.print" is swallowed during "
From: Anton Litvinov <alitvinov () openjdk ! java ! net>
Date: 2021-06-14 13:32:14
Message-ID: wTM7hzTJPQSCaLBssMow8o6ZP1negBNqKQZOAdRxQhE=.2f2573e5-3126-4a80-8ba8-99a74c55d440 () github ! com
[Download RAW message or body]
On Fri, 14 May 2021 18:37:46 GMT, Anton Litvinov <alitvinov@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 <alitvinov@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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic