Skip to content

Commit

Permalink
Merge #3213 into 3.5.0-RC1
Browse files Browse the repository at this point in the history
  • Loading branch information
chemicL committed Oct 6, 2022
2 parents 1afea41 + d9fae3a commit bdcc727
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,26 +74,50 @@ public void shouldDetectBlockingCallsInOperators() {
}

@Test
public void shouldNotReportScheduledFutureTask() {
for (int i = 0; i < 1_000; i++) {
public void shouldNotReportSchedulerScheduledFutureTask() {
for (int i = 0; i < 10_000; i++) {
Scheduler taskScheduler = Schedulers.newSingle("foo");
try {
Runnable dummyRunnable = () -> {
};

for (int j = 0; j < 257; j++) {
taskScheduler.schedule(dummyRunnable, 200, TimeUnit.MILLISECONDS);
taskScheduler.schedule(dummyRunnable, j + 1, TimeUnit.MILLISECONDS);
}
Disposable disposable = taskScheduler.schedule(dummyRunnable, 1, TimeUnit.SECONDS);

RaceTestUtils.race(disposable::dispose, disposable::dispose);
RaceTestUtils.race(Schedulers.parallel(), disposable::dispose);
}
finally {
taskScheduler.dispose();
}
}
}

@Test
public void shouldNotReportWorkerScheduledFutureTask() {
for (int i = 0; i < 10_000; i++) {
Scheduler scheduler = Schedulers.newSingle("foo");
Scheduler.Worker worker = scheduler.createWorker();

try {
Runnable dummyRunnable = () -> {
};

for (int j = 0; j < 257; j++) {
worker.schedule(dummyRunnable, j + 1, TimeUnit.MILLISECONDS);
}
Disposable disposable = worker.schedule(dummyRunnable, 1, TimeUnit.SECONDS);

RaceTestUtils.race(Schedulers.parallel(), disposable::dispose);
}
finally {
worker.dispose();
scheduler.dispose();
}
}
}

void expectBlockingCall(String desc, Consumer<CompletableFuture<Object>> callable) {
Assertions
.assertThatThrownBy(() -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public void applyTo(BlockHound.Builder builder) {

// Calls ScheduledFutureTask#cancel that may short park in DelayedWorkQueue#remove for getting a lock
builder.allowBlockingCallsInside(SchedulerTask.class.getName(), "dispose");
builder.allowBlockingCallsInside(WorkerTask.class.getName(), "dispose");

builder.allowBlockingCallsInside(ThreadPoolExecutor.class.getName(), "processWorkerExit");
}
Expand Down

0 comments on commit bdcc727

Please sign in to comment.