EINTR is happening during suspend/resume, which was causing all of
the modules to die (and requiring a restart of amiwm to re-run all
of its modules.)
This fixes things in FreeBSD suspend/resume so, well, the modules
keep working. :)
* add a basic select() loop for the read FD to see if it's ready
* optionally block in md_read() even if we timeout - this is used for
the md_command() side of things
* md_handle_input() however doesn't block and will happily timeout
so the loop can run and the periodic function can run.
This indeed seems to work. It's a bit dirty, but it at least stops
the main loop from being fully blocking and that's super useful for
modules that wish to schedule background work.
* Yeah it'd be nice to just use libevent here, alas
* Figure out how all the reading/writing works and comment it
* Add a periodic function that'll be called every trip through
the main loop; will turn it into something more formally periodic
later.
There's still lots to do here before I can actually schedule
periodic events and the read()s are non-blocking. Give it time!