No feedback? Anyway, NVM. Check out my page if you want to see the future
of programming (or lack thereof).

Cheers,
Stefan

On 11 December 2017 at 02:05, Stefan Reich <
[email protected]> wrote:

> Ah, I think I found out why it's not a problem. The spurious
> IdentityWeakReference instances are indeed added to the queue. But once
> they are ready for reaping, they are set to null already. So no live
> objects can ever get lost.
>
> Still, it would be a tiny efficiency win not to add references to the
> queue unnecessarily. For example, the IdentityWeakReference made in the
> remove() method can always be queue-less.
>
> Cheers,
> Stefan
> BotCompany.de
>
> On 11 December 2017 at 01:46, Stefan Reich <stefan.reich.maker.of.eye@
> googlemail.com> wrote:
>
>> Hi, I'm from the "Fix Java" department.
>>
>> This is an advanced problem, please bear with me.
>>
>> The issue concerns WeakIdentityHashMap (https://github.com/apache/avr
>> o/blob/master/lang/java/avro/src/main/java/org/apache/avro/
>> util/WeakIdentityHashMap.java). I believe there may be a bug.
>>
>> Suppose the remove() function is called:
>>
>> public V remove(Object key) {
>>     reap();
>>     return backingStore.remove(new IdentityWeakReference(key));
>>   }
>>
>> As you can see, an instance of IdentityWeakReference is made in the
>> process, and it registers itself against the ReferenceQueue. Herein lies
>> the problem.
>>
>> The IdentityWeakReference is added to the queue, but not to the map, so
>> it shouldn't be in the queue either. I think this creates a problem in the
>> reap() method later.
>>
>> Let's suppose the object was not in the map at the time of calling
>> remove(). Later, though, a matching key is inserted. THEN the reap() method
>> gets called, finds the spuriously added IdentityWeakReference and deletes
>> an object that shouldn't be deleted.
>>
>> Haha. Does anyone get any of this? As I said, it's advanced - but then
>> again, you guys write these classes.
>>
>> I think It is possible to fix this issue by creating
>> IdentityWeakReference objects without a queue in carefully selected places.
>>
>> First we might need to produce a failing test case. Anyone interested?
>>
>> Many greetings,
>>
>> Stefan Reich
>> BotCompany.de
>>
>
>


-- 
Stefan Reich
BotCompany.de

Reply via email to