diff --git a/src/input/plugins/UringInputPlugin.cxx b/src/input/plugins/UringInputPlugin.cxx
index bea7c523b..f001c5775 100644
--- a/src/input/plugins/UringInputPlugin.cxx
+++ b/src/input/plugins/UringInputPlugin.cxx
@@ -33,6 +33,7 @@ static const size_t URING_RESUME_AT = 384 * 1024;
 
 static EventLoop *uring_input_event_loop;
 static Uring::Queue *uring_input_queue;
+static bool uring_input_initialized = false;
 
 class UringInputStream final : public AsyncInputStream, Uring::ReadHandler {
 	Uring::Queue ů
@@ -163,6 +164,16 @@ UringInputStream::OnReadError(int error) noexcept
 InputStreamPtr
 OpenUringInputStream(const char *path, Mutex &mutex)
 {
+	if (!uring_input_initialized) {
+		BlockingCall(*uring_input_event_loop, [](){
+			if (uring_input_initialized)
+				return;
+
+			uring_input_queue = uring_input_event_loop->GetUring();
+			uring_input_initialized = true;
+		});
+	}
+
 	if (uring_input_queue == nullptr)
 		return nullptr;
 
@@ -187,8 +198,4 @@ void
 InitUringInputPlugin(EventLoop &event_loop) noexcept
 {
 	uring_input_event_loop = &event_loop;
-
-	BlockingCall(event_loop, [](){
-		uring_input_queue = uring_input_event_loop->GetUring();
-	});
 }