commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gilles (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MATH-1134) unsafe initialization in BicubicSplineInterpolatingFunction
Date Thu, 03 Jul 2014 21:46:34 GMT

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

Gilles commented on MATH-1134:
------------------------------

Phil,

You seem always reluctant to let the code throw a NPE. Although I think that it is perfectly
fine behaviour to signal a programming error, would you like it better if we change the exception
type to "MathIllegalStateException"?


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

Mime
View raw message