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
This commit is contained in:
Christian Helmuth 2020-08-14 15:55:35 +02:00 committed by Norman Feske
parent 9e42a9ac7e
commit a89d61acf2
2 changed files with 1 additions and 2 deletions

View File

@ -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 */ /* initiate potential deferred-signal handling in entrypoint */
if (_deferred_signals.first()) { if (_deferred_signals.first()) {
/* construct the handler on demand (otherwise we break core) */ /* construct the handler on demand (otherwise we break core) */

View File

@ -458,6 +458,7 @@ struct Libc::Kernel final : Vfs::Io_response_handler,
} else { } else {
/* block for signals */ /* block for signals */
_env.ep().wait_and_dispatch_one_io_signal(); _env.ep().wait_and_dispatch_one_io_signal();
handle_io_progress();
} }
if (!_kernel_routine && _resume_main_once && !_setjmp(_kernel_context)) if (!_kernel_routine && _resume_main_once && !_setjmp(_kernel_context))