[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