[ 
https://issues.apache.org/jira/browse/MATH-1134?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14048313#comment-14048313
 ] 

Phil Steitz commented on MATH-1134:
-----------------------------------

An alternative would be to just put the null check / initialization code above 
in a sync block.  The performance hit caused by the change is probably not 
large, but users who just want to interpolate may be annoyed by it.  

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