On Wed, 24 Mar 2021 09:16:33 GMT, Prasanta Sadhukhan <psadhuk...@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

Reply via email to