RFR: 4200096: OffScreenImageSource.removeConsumer NullPointerException [v6]

Jeremy duke at openjdk.org
Fri Apr 21 23:18:46 UTC 2023


On Fri, 21 Apr 2023 21:31:54 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:

>> Jeremy has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   4200096: removing whitespace diffs
>>   
>>   prrace pointed out this branch introduced some pointless whitespace changes.
>>   https://github.com/openjdk/jdk/pull/13408#discussion_r1164740594
>
> src/java.desktop/share/classes/sun/awt/image/OffScreenImageSource.java line 208:
> 
>> 206:             // ImageConsumer detaches itself from this ImageProducer mid-production.
>> 207: 
>> 208:             if (theConsumer != null) {
> 
> Do we need here and a few lines above save the theConsumer to the local, then check to null, then call imageComplete?

My understanding is:

This ticket focuses on the use case where an ImageConsumer detaches itself from this OffScreenImageSource mid-production by calling `removeConsumer(ImageConsumer)`. So in this situation: I'd argue no, the ImageConsumer should not get an `imageComplete(int)` notification. Because it opted to remove itself.

Does this answer your question, or are you considering a different use case?

(Note: `addConsumer` is synchronized, so it's *usually* reasonable to assume the field `OffScreeImageSource#theConsumer` acts *mostly* like a local variable. I could contrive a new failing test case if one ImageConsumer called `addConsumer(newDifferentConsumer)` while receiving a notification, but that's a separate discussion. It's beyond the scope of this ticket, and (to my knowledge) it's a contrived edge case that nobody has ever actually complained about in the real world. And it would fail with or without the changes in this PR...)

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13408#discussion_r1174219442



More information about the client-libs-dev mailing list