emcrisostomo / fswatch

A cross-platform file change monitor with multiple backends: Apple OS X File System Events, *BSD kqueue, Solaris/Illumos File Events Notification, Linux inotify, Microsoft Windows and a stat()-based backend.
https://emcrisostomo.github.io/fswatch/
GNU General Public License v3.0
5.01k stars 326 forks source link

"Error: Event queue overflow." when updating many files in Windows 10/Cygwin #160

Closed gerald-ziprecruiter closed 7 years ago

gerald-ziprecruiter commented 7 years ago

When monitoring a directory with a large amount of files changing (say switching a branch on git), the program seems to exit with the following output:

An error occurred and the program will be terminated.
Error: Event queue overflow.

When I do a -v I get this when starting the monitor:

register_signal_handlers: SIGTERM handler registered.
register_signal_handlers: SIGABRT handler registered.
register_signal_handlers: SIGINT handler registered.
start_monitor: Adding path: /cygdrive/c/my-folder
initialize_events: Creating event for C:\my-folder.
initialize_events: Event 380 created for C:\my-folder.
process_path: Processing C:\my-folder.
init_search_for_path: Initializing search structures for C:\my-folder.
init_search_for_path: Open file handle: 392.
continue_read: Event 380 reset.
read_changes_async: 0xffffc880.
try_read: GetOverlappedResult: Overlapped I/O event is not in a signaled state.

process_path: I/O incomplete.
process_path: Processing C:\my-folder.
try_read: GetOverlappedResult: Overlapped I/O event is not in a signaled state.

process_path: I/O incomplete.
process_path: Processing C:\my-folder.
try_read: GetOverlappedResult: Overlapped I/O event is not in a signaled state.

process_path: I/O incomplete.
... repeat as long as the monitor is running ...

And when I do the git checkout:

process_path: GetOverlappedResult returned 42 bytes
continue_read: Event 388 reset.
read_changes_async: 0x60004ece0.
process_path: Processing C:\my-folder.
try_read: GetOverlappedResult: The operation completed successfully.

process_path: GetOverlappedResult returned 0 bytes
An error occurred and the program will be terminated.
Error: Event queue overflow.
stop: Stopping the monitor.

The command I ran was:

fswatch -v -o -1 -e .git -e .gitignore /cygdrive/c/my-folder

Attempted it with/without the excludes, -1 and -v, fwiw.

This works fine if I only change one file.

gerald-ziprecruiter commented 7 years ago

Duh, --allow-overflow. That seems to solve the problem.