[ 
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)

Reply via email to