[
https://issues.apache.org/jira/browse/MATH-1134?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Phil Steitz updated MATH-1134:
------------------------------
Attachment: MATH-1134.patch
Attached is a patch against the pre-1606940 code that should fix the race.
Since we require JDK 1..5+, the double-checked locking should be OK. This fix
avoids having to add constructor arguments, etc. and will only impose sync
overhead (one time) for those wanting the partials.
> unsafe initialization in BicubicSplineInterpolatingFunction
> -----------------------------------------------------------
>
> Key: MATH-1134
> URL: https://issues.apache.org/jira/browse/MATH-1134
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 3.3
> Reporter: Derek Scherger
> Priority: Minor
> Attachments: MATH-1134.patch
>
>
> The lazy initialization of the internal array of partialDerivatives in
> BicubicSplineInterpolatingFunction is not thread safe. If multiple threads
> call any of the partialDerivative functions concurrently one thread may start
> the initialization and others will see the array is non-null and assume it is
> fully initialized. If the internal array of partial derivatives was
> initialized in the constructor this would not be a problem.
> i.e. the following check in partialDerivative(which, x, y)
> if (partialDerivatives == null) {
> computePartialDerivatives();
> }
> will start the initialization. However in computePartialDerivatives()
> partialDerivatives = new BivariateFunction[5][lastI][lastJ];
> makes it appear to other threads as the the initialization has completed when
> it may not have.
--
This message was sent by Atlassian JIRA
(v6.2#6252)