From 272345f7356cc0dc01ac4d75a7ee0407754c442a Mon Sep 17 00:00:00 2001 From: rfresh2 <89827146+rfresh2@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:34:51 -0800 Subject: [PATCH] don't block request futures in client event loop --- src/main/java/com/zenith/util/RequestFuture.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/com/zenith/util/RequestFuture.java b/src/main/java/com/zenith/util/RequestFuture.java index 09328c58..b7578fec 100644 --- a/src/main/java/com/zenith/util/RequestFuture.java +++ b/src/main/java/com/zenith/util/RequestFuture.java @@ -1,5 +1,6 @@ package com.zenith.util; +import com.zenith.Proxy; import lombok.SneakyThrows; import org.jetbrains.annotations.NotNull; @@ -47,6 +48,10 @@ public boolean isDone() { @SneakyThrows @Override public Boolean get() { + var client = Proxy.getInstance().getClient(); + if (client != null && client.getClientEventLoop().inEventLoop()) { + throw new IllegalStateException("Cannot block on RequestFuture in client event loop"); + } Wait.waitUntil(() -> completed, 1, 1L, TimeUnit.SECONDS); return accepted; } @@ -54,7 +59,16 @@ public Boolean get() { @SneakyThrows @Override public Boolean get(final long timeout, @NotNull final TimeUnit unit) { + var client = Proxy.getInstance().getClient(); + if (client != null && client.getClientEventLoop().inEventLoop()) { + throw new IllegalStateException("Cannot block on RequestFuture in client event loop"); + } Wait.waitUntil(() -> completed, 1, timeout, unit); return accepted; } + + public boolean getNow() { + if (!completed) return false; + return accepted; + } }