### CI Link

https://gradle-enterprise.elastic.co/s/jw2osfn3o4ork

### Repro line

`gradlew ':x-pack:plugin:esql:internalClusterTest' --tests "org.elasticsearch.xpack.esql.action.EsqlActionTaskIT.testCancelRead" -Dtests.seed=F9D81006206BDA07 -Dtests.locale=und -Dtests.timezone=CST -Druntime.java=20`

### Does it reproduce?

No

### Applicable branches

main

### Failure history

_No response_

### Failure excerpt

This doesn't reproduce, even though I've tried using both seeds (from inside IntelliJ) and running the test multiple times with other random seeds.

```
org.elasticsearch.xpack.esql.action.EsqlActionTaskIT > testCancelRead FAILED
    java.lang.Error: Maximum permit count exceeded
        at __randomizedtesting.SeedInfo.seed([F9D81006206BDA07:6CF5A28298786366]:0)
        at java.base/java.util.concurrent.Semaphore$Sync.tryReleaseShared(Semaphore.java:198)
        at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1146)
        at java.base/java.util.concurrent.Semaphore.release(Semaphore.java:619)
        at org.elasticsearch.xpack.esql.action.EsqlActionTaskIT.cancelTask(EsqlActionTaskIT.java:200)
        at org.elasticsearch.xpack.esql.action.EsqlActionTaskIT.testCancelRead(EsqlActionTaskIT.java:161)
```
x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionTaskIT.java
assertThat(exchangeSinks, greaterThanOrEqualTo(1));
        assertThat(exchangeSources, equalTo(1));
        scriptPermits.release(Integer.MAX_VALUE);
        assertThat(response.get().values(), equalTo(List.of(List.of((long) NUM_DOCS))));
    }
    public void testCancelRead() throws Exception {
        ActionFuture<EsqlQueryResponse> response = startEsql();
        List<TaskInfo> infos = getTasksStarting();
        TaskInfo running = infos.stream().filter(t -> t.description().equals(READ_DESCRIPTION)).findFirst().get();
        cancelTask(running.taskId());
        assertCancelled(response);
    }
    public void testCancelMerge() throws Exception {
        ActionFuture<EsqlQueryResponse> response = startEsql();
        List<TaskInfo> infos = getTasksStarting();
        TaskInfo running = infos.stream().filter(t -> t.description().equals(MERGE_DESCRIPTION)).findFirst().get();
        cancelTask(running.taskId());
        assertCancelled(response);
    }
    public void testCancelEsqlTask() throws Exception {
        ActionFuture<EsqlQueryResponse> response = startEsql();
        getTasksStarting();
        List<TaskInfo> tasks = client().admin()
            .cluster()
            .prepareListTasks()
            .setActions(EsqlQueryAction.NAME)
            .setDetailed(true)
            .get()
            .getTasks();
        cancelTask(tasks.get(0).taskId());