Portability fixes. Mostly for Android.
commit90bc5ee4867a8690b9053917ec30053d61570999
authorBen Kibbey <bjk@luxsci.net>
Sun, 11 Nov 2012 02:09:53 +0000 (10 21:09 -0500)
committerBen Kibbey <bjk@luxsci.net>
Sun, 11 Nov 2012 22:29:38 +0000 (11 17:29 -0500)
tree21a8db2b48b0ed021d299987765d3fd299109631
parent3b39aa16e48da0eeefc36faae695b8f1e0cbf5be
Portability fixes. Mostly for Android.

Now uses SIGUSR2 to terminate threads since sigwaitinfo() is not as
common (Android) as sigtimedwait() and also pthread_cancel() is not
available on Android. SIGCHLD is used in the main thread to wait for
all other clients to disconnect before exiting.

The drawback of using sigtimedwait() (because mostly of the lack of
pthread_cancel()) is that some threads cannot block while waiting for
an operation. The (tcp_)accept_thread(), for example, needs to set the
file descriptor to O_NONBLOCK to be able to check whether it recieved
SIGUSR2 from the main thread (shutdown/reload). Its less fast since
there needs to be a wait interval between accept() calls to prevent
CPU spikes. It's about twice as slow as sigwaitinfo() with the current
wait interval, at least in accept_thread(), but still should be fast
enough for most folks.
13 files changed:
configure.ac
src/Makefile.am
src/agent.c
src/commands.c
src/common.h
src/mutex.h
src/pwmd.c
src/rcfile.c
src/rcfile.h
src/status.c
src/tls.c
src/util-misc.c
src/util-string.h