[OpenJDK 2D-Dev] RFR: 8263984: Invalidate printServices when there are no printers

Alexey Ivanov aivanov at openjdk.java.net
Wed Mar 24 09:28:39 UTC 2021

On Wed, 24 Mar 2021 09:16:33 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:

>> When `getAllPrinterNames()` returns null, the list of `printServices` is assigned a new empty array without invalidating old services which were in the array before.
>> The old print services should be invalidated.
> src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java line 120:
>> 118:             // don't get the default.
>> 119:             invalidateServices();
>> 120:             printServices = new PrintService[0];
> I am not sure this call to invalidateServices() is needed as we are creating a new `printServices` object of 0 length so making the old printServices invalid is redundant as it is same global variable.

That's exactly the problem I am addressing.

In the regular case, the existing services left in `printServices` are invalidated before `newServices` is assigned to it. Yet no existing services are invalidated if all the printers were removed from the system.

Why is it needed to invalidate deleted services if the list of printers is updated and if at least one printer is left in the system? Why is it not needed to invalidate deleted services if all the printers are removed from the system?


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

More information about the 2d-dev mailing list