[
https://issues.apache.org/jira/browse/LANG-481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12666941#action_12666941
]
Boris commented on LANG-481:
----------------------------
toString, maxObject and minObject do not have *this* kind of race where you
could end up with *wrong* data.
Of course there is race too, but in the worst case, you may only end up
calculating the value every time the method is called and the cached value is
not visible to your Thread. Of course you get no caching, but you'll never get
wrong data.
So this worst case is pretty much like not caching it at all, but with some
luck you get the value cached - at least once for each thread.
Looking at other classes this seems to be a common technique in commons-lang.
> Possible race-conditions in hashCode of the range classes
> ---------------------------------------------------------
>
> Key: LANG-481
> URL: https://issues.apache.org/jira/browse/LANG-481
> Project: Commons Lang
> Issue Type: Bug
> Affects Versions: 2.4
> Reporter: Boris
> Priority: Minor
>
> The hashCode() methods of the range classes look very suspicious to me. The
> value is lazily initialized, but the calculation is done _on the cached
> value. With some unlucky timing a caller may get an incomplete hash.
> An unlucky sequence of Code could be something like
> T1: if (hashCode == 0) // true
> T1: hashCode = 17;
> T2: if (hashCode == 0) // now false because hashCode was already set
> to 17
> T2: return hashCode; // return 17
> T1: hashCode = 37 * hashCode...........
> where T1 and T2 are different threads accessing the method in parallel and T2
> gets the wrong hash "17".
> Affected classes are
> org.apache.commons.lang.math.DoubleRange
> org.apache.commons.lang.math.FloatRange
> org.apache.commons.lang.math.IntRange
> org.apache.commons.lang.math.LongRange
> org.apache.commons.lang.math.NumberRange
> org.apache.commons.lang.math.Range
> Possible fix: calculate the hash on a temporary variable and finally assign
> it to the member
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.