You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2015/11/23 23:17:54 UTC
[math] [MATH-1294] Fix potential race condition in PolynomialUtils. Thanks to Kamil Włodarczyk
Repository: commons-math
Updated Branches:
refs/heads/MATH_3_X 978f89c75 -> fe23c9b04
[MATH-1294] Fix potential race condition in PolynomialUtils. Thanks to Kamil Włodarczyk
Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/fe23c9b0
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/fe23c9b0
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/fe23c9b0
Branch: refs/heads/MATH_3_X
Commit: fe23c9b04aff89b3c6da20b4769157b8c577d071
Parents: 978f89c
Author: Thomas Neidhart <th...@gmail.com>
Authored: Mon Nov 23 23:16:58 2015 +0100
Committer: Thomas Neidhart <th...@gmail.com>
Committed: Mon Nov 23 23:16:58 2015 +0100
----------------------------------------------------------------------
src/changes/changes.xml | 5 +++++
.../math3/analysis/polynomials/PolynomialsUtils.java | 10 +++++++---
2 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-math/blob/fe23c9b0/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7dfacc5..3448c23 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -51,6 +51,11 @@ If the output is not quite correct, check for invisible trailing spaces!
</properties>
<body>
<release version="3.6" date="XXXX-XX-XX" description="">
+ <action dev="tn" type="fix" issue="MATH-1294" due-to="Kamil Włodarczyk">
+ Fixed potential race condition in PolynomialUtils#buildPolynomial in
+ case polynomials are generated from multiple threads. Furthermore, the
+ synchronization is now performed on the coefficient list instead of the class.
+ </action>
<action dev="psteitz" type="update" issue="MATH-1246">
Added bootstrap method to KolmogorovSmirnov test.
</action>
http://git-wip-us.apache.org/repos/asf/commons-math/blob/fe23c9b0/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialsUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialsUtils.java b/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialsUtils.java
index 5604149..2efa07d 100644
--- a/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialsUtils.java
+++ b/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialsUtils.java
@@ -107,6 +107,7 @@ public class PolynomialsUtils {
/** Fixed recurrence coefficients. */
private final BigFraction[] coeffs = { BigFraction.ZERO, BigFraction.TWO, BigFraction.ONE };
/** {@inheritDoc} */
+ @Override
public BigFraction[] generate(int k) {
return coeffs;
}
@@ -131,6 +132,7 @@ public class PolynomialsUtils {
return buildPolynomial(degree, HERMITE_COEFFICIENTS,
new RecurrenceCoefficientsGenerator() {
/** {@inheritDoc} */
+ @Override
public BigFraction[] generate(int k) {
return new BigFraction[] {
BigFraction.ZERO,
@@ -157,6 +159,7 @@ public class PolynomialsUtils {
return buildPolynomial(degree, LAGUERRE_COEFFICIENTS,
new RecurrenceCoefficientsGenerator() {
/** {@inheritDoc} */
+ @Override
public BigFraction[] generate(int k) {
final int kP1 = k + 1;
return new BigFraction[] {
@@ -184,6 +187,7 @@ public class PolynomialsUtils {
return buildPolynomial(degree, LEGENDRE_COEFFICIENTS,
new RecurrenceCoefficientsGenerator() {
/** {@inheritDoc} */
+ @Override
public BigFraction[] generate(int k) {
final int kP1 = k + 1;
return new BigFraction[] {
@@ -234,6 +238,7 @@ public class PolynomialsUtils {
return buildPolynomial(degree, JACOBI_COEFFICIENTS.get(key),
new RecurrenceCoefficientsGenerator() {
/** {@inheritDoc} */
+ @Override
public BigFraction[] generate(int k) {
k++;
final int kvw = k + v + w;
@@ -359,9 +364,8 @@ public class PolynomialsUtils {
private static PolynomialFunction buildPolynomial(final int degree,
final List<BigFraction> coefficients,
final RecurrenceCoefficientsGenerator generator) {
-
- final int maxDegree = (int) FastMath.floor(FastMath.sqrt(2 * coefficients.size())) - 1;
- synchronized (PolynomialsUtils.class) {
+ synchronized (coefficients) {
+ final int maxDegree = (int) FastMath.floor(FastMath.sqrt(2 * coefficients.size())) - 1;
if (degree > maxDegree) {
computeUpToDegree(degree, maxDegree, generator, coefficients);
}