syscall_server: fix epoll_wait implementation #101
Merged
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.
This PR fixes the implementation of
epoll_wait
in syscall server, so make bpftrace exit properly.In kernel, syscall
epoll_wait
could be interrupted by signal, when either no requests were received, or the timeout expired.In the previous
epoll_wait
of syscall-server, we doesn't implement similar things. So when signals were devilered during the execution ofepoll_wait
, they were handled normally (e.g directly call the signal handler).In the current implementation, we block the develivery of SIGINT and SIGTERM (more could be added after suitable tests) during the execution of epoll_wait, but unblock them when epoll_wait is sleeping. epoll_wait will use sigtimedwait to wait for SIGINT and SIGTERM when no requests were received. Once these signal were develivered when sleeping, we just set
errno
toEINTR
, and return -1 from epoll_wait. This will keep the same behavior like the kernel epoll_wait implementation.Closes #99