server: keep the sleep-wake path active when the VRAM arbiter is enabled

The request handler only calls wait_until_no_sleep() (which wakes a server out
of its sleeping state) when sleep_idle_seconds >= 0. But the VRAM arbiter's
cross-process doorbell can put a server to sleep even when idle-sleep is
disabled, so without this a doorbell-slept server would never wake and requests
to it would hang until timeout.

Do not bypass the wake path when LLAMA_SLEEP_VRAM_ONLY is set, so the arbiter no
longer depends on --sleep-idle-seconds being configured.

Assisted-by: Claude
This commit is contained in:
2026-07-25 02:32:16 +02:00
parent 7398c40eda
commit bf68c5446e
+6 -2
View File
@@ -4199,8 +4199,12 @@ struct server_res_generator : server_res_spipe {
server_response_reader rd; server_response_reader rd;
server_res_generator(server_queue & queue_tasks, server_response & queue_results, int sleep_idle_seconds, bool bypass_sleep = false) server_res_generator(server_queue & queue_tasks, server_response & queue_results, int sleep_idle_seconds, bool bypass_sleep = false)
: rd(queue_tasks, queue_results, HTTP_POLLING_SECONDS) { : rd(queue_tasks, queue_results, HTTP_POLLING_SECONDS) {
// fast path in case sleeping is disabled // fast path in case sleeping is disabled. Note: the VRAM arbiter (LLAMA_SLEEP_VRAM_ONLY)
bypass_sleep |= sleep_idle_seconds < 0; // can put the server to sleep via the cross-process doorbell even when idle-sleep is
// disabled (sleep_idle_seconds < 0), so in that case requests must still wake it - otherwise
// a doorbell-slept server would hang, never returning from a request.
static const bool vram_arbiter = getenv("LLAMA_SLEEP_VRAM_ONLY") != nullptr;
bypass_sleep |= (sleep_idle_seconds < 0 && !vram_arbiter);
if (!bypass_sleep) { if (!bypass_sleep) {
queue_tasks.wait_until_no_sleep(); queue_tasks.wait_until_no_sleep();
} }