From a89d61acf20fbfd5a1da59b3415176b5123c6456 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 14 Aug 2020 15:55:35 +0200 Subject: [PATCH] base: call Io_progress_handler only in signal RPC This remove the call to Io_progress_handler::handle_io_progress() from wait_and_dispatch_one_io_signal() to prevent unexpected nesting I/O-progress handling in case of custom dispatch loops (e.g., in libc). The original intention of Io_progress_handler was to inform the entrypoint just before blocking in the entrypoint loop. Issue #2635 --- repos/base/src/lib/base/entrypoint.cc | 2 -- repos/libports/src/lib/libc/internal/kernel.h | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/repos/base/src/lib/base/entrypoint.cc b/repos/base/src/lib/base/entrypoint.cc index 8b6981a293..775887770b 100644 --- a/repos/base/src/lib/base/entrypoint.cc +++ b/repos/base/src/lib/base/entrypoint.cc @@ -233,8 +233,6 @@ bool Entrypoint::_wait_and_dispatch_one_io_signal(bool const dont_block) } } - _handle_io_progress(); - /* initiate potential deferred-signal handling in entrypoint */ if (_deferred_signals.first()) { /* construct the handler on demand (otherwise we break core) */ diff --git a/repos/libports/src/lib/libc/internal/kernel.h b/repos/libports/src/lib/libc/internal/kernel.h index ec2a399ce6..479482096a 100644 --- a/repos/libports/src/lib/libc/internal/kernel.h +++ b/repos/libports/src/lib/libc/internal/kernel.h @@ -458,6 +458,7 @@ struct Libc::Kernel final : Vfs::Io_response_handler, } else { /* block for signals */ _env.ep().wait_and_dispatch_one_io_signal(); + handle_io_progress(); } if (!_kernel_routine && _resume_main_once && !_setjmp(_kernel_context))