diff --git a/runtime/src/local_runqueue_minheap.c b/runtime/src/local_runqueue_minheap.c index 3f2c1d4..3187e9e 100644 --- a/runtime/src/local_runqueue_minheap.c +++ b/runtime/src/local_runqueue_minheap.c @@ -82,21 +82,9 @@ local_runqueue_minheap_get_next() struct sandbox_request *sandbox_request = NULL; int sandbox_rc = priority_queue_top(&local_runqueue_minheap, (void **)&sandbox); - if (sandbox_rc == -ENOENT) { + if (sandbox_rc == -ENOENT && global_request_scheduler_peek() < ULONG_MAX) { /* local runqueue empty, try to pull a sandbox request */ - - /* - * This is effectively the idle loop. A worker thread spinlocks on - * the earliest deadline, checking for the condition that indicates that - * it is empty. - */ - while (sandbox_request == NULL) { - /* Spin without taking the lock if the request queue is empty */ - while (global_request_scheduler_peek() == ULONG_MAX) - ; - - if (global_request_scheduler_remove(&sandbox_request) < 0) goto done; - } + if (global_request_scheduler_remove(&sandbox_request) < 0) goto done; /* Try to allocate a sandbox, returning the request on failure */ sandbox = sandbox_allocate(sandbox_request);