[
https://issues.apache.org/jira/browse/MATH-1134?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14050506#comment-14050506
]
Gilles commented on MATH-1134:
------------------------------
New constructor added in r1607434: a flag will indicate whether initialization
of the internal data needed to call the partial derivatives methods is to be
performed. If set to false (default), calling a method anyway will trigger a
NPE.
Not sure that "false" should be the default...
> 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)