From 046d6855f5e8a5039b319a47c3018a16d4c2f960 Mon Sep 17 00:00:00 2001 From: Tom Date: Sun, 29 Nov 2020 16:05:27 -0700 Subject: Kernel: Move block condition evaluation out of the Scheduler This makes the Scheduler a lot leaner by not having to evaluate block conditions every time it is invoked. Instead evaluate them as the states change, and unblock threads at that point. This also implements some more waitid/waitpid/wait features and behavior. For example, WUNTRACED and WNOWAIT are now supported. And wait will now not return EINTR when SIGCHLD is delivered at the same time. --- Kernel/Syscalls/socket.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Kernel/Syscalls/socket.cpp') diff --git a/Kernel/Syscalls/socket.cpp b/Kernel/Syscalls/socket.cpp index b54f6959e7..ede0d11370 100644 --- a/Kernel/Syscalls/socket.cpp +++ b/Kernel/Syscalls/socket.cpp @@ -112,7 +112,8 @@ int Process::sys$accept(int accepting_socket_fd, Userspace user_addre if (!socket.can_accept()) { if (accepting_socket_description->is_blocking()) { - if (Thread::current()->block(nullptr, *accepting_socket_description).was_interrupted()) + auto unblock_flags = Thread::FileBlocker::BlockFlags::None; + if (Thread::current()->block(nullptr, *accepting_socket_description, unblock_flags).was_interrupted()) return -EINTR; } else { return -EAGAIN; -- cgit v1.2.3