Modify IOSource Manager to implement new loop architecture

- Removes entire FindSoonest method that includes all of the calls to select() for checking for ready sources
- Removes FD_Set checking against IOSources
- Adds system for registering and unregistering file descriptors from IOSources. This allows individual sources to mark themselves as ready to be checked by the loop as they become available.
- Adds entirely new loop architecture based on checking the IOSources for when their next timeout is, and then waiting for either that timeout or when the next source is ready. This also implements the polling based on what the OS supports, instead of just calling select() on all platforms. Currently it supports kqueue, epoll, and plain poll.
- Adds system for pinging the loop to force it to wake up
This commit is contained in:
Tim Wojtulewicz 2019-11-26 17:14:56 -07:00
parent 062cadb124
commit 4fa3e4b9b4
12 changed files with 364 additions and 200 deletions

5
configure vendored
View file

@ -74,6 +74,8 @@ Usage: $0 [OPTION]... [VAR=VALUE]...
(Zeek uses an embedded version by default)
--with-caf=PATH path to C++ Actor Framework install root
(a Broker dependency that is embedded by default)
--with-libkqueue=PATH path to libkqueue install root
(Zeek uses an embedded version by default)
Optional Packages in Non-Standard Locations:
--with-geoip=PATH path to the libmaxminddb install root
@ -320,6 +322,9 @@ while [ $# -ne 0 ]; do
--with-caf=*)
append_cache_entry CAF_ROOT_DIR PATH $optarg
;;
--with-libkqueue=*)
append_cache_entry LIBKQUEUE_ROOT_DIR PATH $optarg
;;
--with-rocksdb=*)
append_cache_entry ROCKSDB_ROOT_DIR PATH $optarg
;;