Emulated Netlink sockets cause infinite busy loops under event-loop#112
Open
doanbaotrung wants to merge 1 commit into
Open
Emulated Netlink sockets cause infinite busy loops under event-loop#112doanbaotrung wants to merge 1 commit into
doanbaotrung wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When guest applications (such as avahi-daemon)
run event loops that wait for netlink messages
using ppoll() or select(), the emulated descriptor
immediately returns POLLIN because the write
end is closed. The application's subsequent
recvmsg or read call returns 0 bytes.
Because no sender credentials can be resolved
from a 0-byte read, the application ignores the
read and immediately queries ppoll() again.
This causes the guest application to spin in
an infinite busy-loop consuming 100% CPU.
Implement a non-blocking self-pipe signaling
mechanism inside src/syscall/netlink.c
Summary by cubic
Fixes infinite busy loops in emulated Netlink sockets when apps use select/ppoll by signaling readiness only when data exists and returning -EAGAIN otherwise. This prevents 100% CPU spin in services like avahi-daemon.
Written for commit 4abb867. Summary will update on new commits.