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)