DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=36541>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=36541





------- Additional Comments From [EMAIL PROTECTED]  2005-09-08 16:43 -------
(In reply to comment #38)
> (In reply to comment #37)
> > If the read operations happens to bump into this moment of temporary
> > inconsistacy the infinite loop can occur.
> 
> All the entry objects will be mutated. While it may be inconsistent and might
> loop for an instant (although I am not convinced this could really be the 
> case;
> I think the trouble without any sync could only occur if there was more than 
> one
> concurrent unsynced write, and in particular, two "remove"), the pointer value
> will be corrected and the loop should exit. That's my interpretation looking 
> at
> the code. I think I'll write a small program to test this.
> 
You can certinaly get null returned when a valid value was added to the Map
previosly as well because of the inconsistency.  The hash index used to locate
the first Entry is based on the hash and the length of the table (I guess we
should say the chosen bucket).  If the value has been added to the map.  Then a
call for a get occurs and a call for a write and the write makes a resize and
the resize changes the location of the bucket then e could match another Entry
besides the one for the correct hash then you start getting into some looping. 
In a test I had a get interation of 4 times occur when this happened, but
considering all of the possible shifting that can occur I'm not convinced that
an infinite loop could not occur.  Given the bucket index algorithm and all of
the possible values for a hash and a table size I don't think one can safely say
it's not possible without synchronizing.  If there is a way to determine that
the behavior of one search for a bucket with any hash is always going to produce
the same result for any size table then I think you can safely not synchronize
the code.(In reply to comment #38)
> (In reply to comment #37)
> > If the read operations happens to bump into this moment of temporary
> > inconsistacy the infinite loop can occur.
> 
> All the entry objects will be mutated. While it may be inconsistent and might
> loop for an instant (although I am not convinced this could really be the 
> case;
> I think the trouble without any sync could only occur if there was more than 
> one
> concurrent unsynced write, and in particular, two "remove"), the pointer value
> will be corrected and the loop should exit. That's my interpretation looking 
> at
> the code. I think I'll write a small program to test this.
> 

You can certinaly get null returned when a valid value was added to the Map
previosly as well because of the inconsistency.  The hash index used to locate
the first Entry is based on the hash and the length of the table (I guess we
should say the chosen bucket).  If the value has been added to the map.  Then a
call for a get occurs and a call for a write and the write makes a resize and
the resize changes the location of the bucket then e could match another Entry
besides the one for the correct hash then you start getting into some looping. 
In a test I had a get interation of 4 times occur when this happened, but
considering all of the possible shifting that can occur I'm not convinced that
an infinite loop could not occur.  Given the bucket index algorithm and all of
the possible values for a hash and a table size I don't think one can safely say
it's not possible without synchronizing.  If there is a way to determine that
the behavior of one search for a bucket with any hash is always going to produce
the same result for any size table then I think you can safely not synchronize
the code.

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to