Repository navigation
Commit 6df5495
Synchronize getPercentile of SynchronizedDescriptiveStatistics
DescriptiveStatistics.getPercentile sets the quantile on the shared
percentile implementation and then calls apply, which is synchronized
in SynchronizedDescriptiveStatistics. The setQuantile step ran outside
the instance lock, so a concurrent getPercentile call could swap the
quantile in between the two steps and a caller could end up computing
a percentile for a quantile it never requested.
Override getPercentile as synchronized so the quantile update and the
apply are atomic with respect to the other synchronized methods on the
same instance. Add a reflection test guarding the synchronized modifier
and a concurrency test that holds the instance monitor while another
thread requests a different quantile, asserting the requested quantile
is the one applied.
Signed-off-by: Lyin-OTTF <htao08203@gmail.com>1 parent 50ba718 commit 6df5495
2 files changed
Lines changed: 56 additions & 0 deletions
File tree
- commons-math-legacy/src
- main/java/org/apache/commons/math4/legacy/stat/descriptive
- test/java/org/apache/commons/math4/legacy/stat/descriptive
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
97 | 105 | | |
98 | 106 | | |
99 | 107 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
56 | 57 | | |
57 | 58 | | |
58 | 59 | | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
59 | 71 | | |
60 | 72 | | |
61 | 73 | | |
| |||
101 | 113 | | |
102 | 114 | | |
103 | 115 | | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
104 | 152 | | |
0 commit comments