Derek Scherger created MATH-1134:
------------------------------------

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