Don't update state of PromiseCombiner when finish(null) is called (#8843)
Motivation: When we fail a call to PromiseCombiner.finish(...) because of a null argument we must not update the internal state before throwing. Modifications: - First do the null check and only after we validated that the argument is not null update the internal state - Add test case. Modifications: Do not mess up internal state of PromiseCombiner when finish(...) is called with a null argument. Result: After your change, what will change.
This commit is contained in:
parent
db79983874
commit
f6f7564602
@ -113,11 +113,12 @@ public final class PromiseCombiner {
|
||||
* @param aggregatePromise the promise to notify when all combined futures have finished
|
||||
*/
|
||||
public void finish(Promise<Void> aggregatePromise) {
|
||||
requireNonNull(aggregatePromise, "aggregatePromise");
|
||||
if (doneAdding) {
|
||||
throw new IllegalStateException("Already finished");
|
||||
}
|
||||
doneAdding = true;
|
||||
this.aggregatePromise = requireNonNull(aggregatePromise, "aggregatePromise");
|
||||
this.aggregatePromise = aggregatePromise;
|
||||
if (doneCount == expectedCount) {
|
||||
tryPromise();
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package io.netty.util.concurrent;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
@ -58,6 +59,18 @@ public class PromiseCombinerTest {
|
||||
combiner = new PromiseCombiner();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullArgument() {
|
||||
try {
|
||||
combiner.finish(null);
|
||||
Assert.fail();
|
||||
} catch (NullPointerException expected) {
|
||||
// expected
|
||||
}
|
||||
combiner.finish(p1);
|
||||
verify(p1).trySuccess(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullAggregatePromise() {
|
||||
combiner.finish(p1);
|
||||
|
Loading…
Reference in New Issue
Block a user