Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kqueue: remove timeout from unix.Kevent() #39

Merged
merged 2 commits into from Mar 6, 2024
Merged

kqueue: remove timeout from unix.Kevent() #39

merged 2 commits into from Mar 6, 2024

Commits on Mar 6, 2024

  1. kqueue: remove timeout from unix.Kevent() (#480)

    The timeout for unix.Kevent() is causing issues; every 100ms it will do a new
    unix.Kevent() syscall, which isn't too efficient: even if you have just one
    change an hour, you will still keep calling kevent() ten times per second,
    resulting in a needlessly high CPU usage.
    
    Without a timeout, kevent() will block indefinitely until there are some events,
    which is much more efficient. We can't just remove the timout however, since we
    can't interrupt the kevent() call on FreeBSD and NetBSD, and it will hang
    forever. This issue is described in more detail here:
    fsnotify/fsnotify#262 (comment)
    
    To solve this we register a new kevent() with the file descriptor set to the
    closepipe; when this pipe is closed an event is sent and kevent() will stop
    blocking.
    
    This is a rebased version of #124.
    
    Fixes #89
    Fixes #237
    Fixes #333
    Supersedes and closes #124
    Supersedes and closes #262
    Supersedes and closes #334
    
    Co-authored-by: Felix Lange <fjl@twurst.com>
    2 people authored and shogo82148 committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    9d22c12 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    2a8aed8 View commit details
    Browse the repository at this point in the history