Hi Phil,
Please find an updated webrev:
http://cr.openjdk.java.net/~psadhukhan/8066139/webrev.01/
It seems if printerJobThread finished printing, it will set
graphicsToBeDrawn/graphicsDrawn ArrayList to null resulting in
getGraphics() returning null in the 2nd iteration causing NPE so
I have modified printerJobThread#run so that when it has finished
printing, do not set the arrayList to null but set a flag. In
getGraphics(), I check that flag and start a new printerJobThread to
handle the next printing.
I have tested "All" and "Pages" selection.
Regards
Prasanta
On 2/22/2016 1:35 PM, Philip Race wrote:
> It seems this behaviour is same in linux too for this HighResTest
testcase.
OK that is good information .. so is not really a regression from
8061267 <https://bugs.openjdk.java.net/browse/JDK-8061267> as that is
not in
any way touching linux .. it is a pre-existing issue in a code path
that was not being tested.
-phil.
On 2/22/16, 11:59 AM, prasanta sadhukhan wrote:
Hi Phil,
>>Additionally, have you tried running the original test case
provided with 8061267
>> against your fix ?
The 8061267 testcase behaves similarly before and after my fix.
>> If I manually select it, (ie select that "Pages" radio button)
then press print,
>> then voila, the NPE is back!
It seems this behaviour is same in linux too for this HighResTest
testcase.
Regards
Prasanta
On 2/20/2016 1:55 AM, Phil Race wrote:
I am having trouble building JDK 9 at the moment so i applied
8061267 to jdk8u-dev
and was able to reproduce the regression and have a couple of
observations
- I am now seeing the NPE after the first page as you did .. puzzling.
- I next applied your fix but still see the NPE !
It appears that all your fix did is stop the "PD_PAGENUMS" flag
being automatically
set. If I manually select it, (ie select that "Pages" radio button)
then press print,
then voila, the NPE is back!
-phil.
On 02/19/2016 10:53 AM, Phil Race wrote:
I am not sure I can be correctly understanding the fix as the
ramification seems
to be that if the users wants to print only Page 3 of a 10 page
document and so sets
from page=3 and to page=3, that this request will be ignored and
all pages will
be printed .. can you test such a scenario.
Additionally, have you tried running the original test case
provided with 8061267
against your fix ?
Also when I ran the HighResTest on a current build I saw a null
graphics on
the very first call to getGraphics() which is different than what I
interpret
you as saying - you see the null *after* the first page is printed.
-phil.
On 02/19/2016 01:18 AM, prasanta sadhukhan wrote:
Hi Phil, All,
Bug: https://bugs.openjdk.java.net/browse/JDK-8066139
webrev: http://cr.openjdk.java.net/~psadhukhan/8066139/webrev.00/
It was seen after fix of JDK-8061267
<https://bugs.openjdk.java.net/browse/JDK-8061267>: PrinterJob:
Specified Page Ranges not displayed in Windows Native Print Dialog
the closed/java/awt/PrintJob/HighResTest/HighResTest.java was
failing with NPE when PrinterJob.getGraphics() is called the 2nd
time before calling PrinterJob.end().
The above fix caused this regression because it sets the
PD_PAGENUMS flag for windows PrintDlg struct which causes *Pages*
radio button to be selected in print dialog.
However, fromPage and toPage was both set to 1 so after the 1st
page is printed, RasterPrinterJob.print(attributes) finishes and
graphicsToBeDrawn.closeWhenEmpty() gets called
http://hg.openjdk.java.net/jdk9/client/jdk/file/d8def65c6c00/src/java.desktop/share/classes/sun/print/PrintJob2D.java#l1006
which sets the queue to null so when PrinterJob2D#getGraphics()
calls graphicsToBeDrawn.pop() it sees queue to be null and sets
graphics object to be null so
PrinterJob.getGraphics() gets null and g.drawLine in testcase
causes NPE since g is null.
Fix was done to set the PD_PAGENUMS flag only when toPage is more
than fromPage in which case, "All" will be selected in printer
dialog and RasterPrinterJob.print() will finish only after
printing all the pages.
Regards
Prasanta