[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: RFR: 8295324: JavaFX: Blank pages when printing [v3]
From:       eduardsdv <duke () openjdk ! org>
Date:       2022-10-28 14:26:45
Message-ID: B81mSExw_Kr6cgervKQ-aBWU4eFtfW7Zef6byyjn4lE=.30f43263-40c6-445f-aa8e-4378a8c48de7 () github ! com
[Download RAW message or body]

On Fri, 28 Oct 2022 13:54:40 GMT, eduardsdv <duke@openjdk.org> wrote:

> > This fixes a race condition between application and 'Print Job Thread' threads \
> > when printing. 
> > The race condition occurs when application thread calls `endJob()`, which in \
> > effect sets the `jobDone` flag to true, and when the 'Print Job Thread' thread \
> > was in the `synchronized` block in `waitForNextPage()` at that time. The 'Print \
> > Job Thread' thread checks `jobDone` flag after exiting the `synchronized` block \
> > and, if it is true, skips the last page. 
> > In this fix, not only the `jobDone` is checked, but also that there is no other \
> > page to be printed. It was also needed to introduce a new flag 'jobCanceled', to \
> > skip the page if the printing was canceled by 'cancelJob()'.
> 
> eduardsdv has updated the pull request incrementally with two additional commits \
> since the last revision: 
> - 8295324: Fix skipping of pages when printing
> 
> This occurs in print(Graphics, PageFormat, int) if the 'jobDone' flag
> was previously set by the 'endJob()' method.
> - 8295324: Adjust the J2DPrinterJobTest
> 
> The test now also checks for the second race condition around 'jobDone'
> flag, which is in the print(Graphics, PageFormat, int) method.

I found the second place with the race condition. It was in the print(Graphics g, \
PageFormat pf, int pageIndex) method. Also here "jobDone" was checked without \
checking if a page was pending.

Please review.

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

PR: https://git.openjdk.org/jfx/pull/916


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic