Reorder bosserver startup prior to pthreads

The rx calls will take locks when built in pthreaded mode, and must go
after rx_Init().  Some other setup would benefit from using time-domain
locking and should run before we go multithreaded.

In particular, initialize bozo_confdir while single-threaded, as it is
otherwise protected by the afsconf internal locking.  While here, pass
NULL to afsconf_SetCellInfo -- bozo_confdir would always be NULL there,
anyway.

Change a couple globals into local variables in main; they are just
used to defer setup after argument parsing.

ReadBozoFile will create worker threads to monitor child processes,
so it cannot move up too far.

Change when we daemonize, too.

Change-Id: If7b6883748919270c9a5a41cd8e6fb724e95aa36
bozo: initial pthread support

Add pthread signal handling to bosserver to using softsig.  IOMGR_Sleep()
simply converted to sleep() for bosserver and bos.

Change-Id: I4bf741e04a6f87a1551dd831a20851b56b10d910
bozo: protect the allProcs list with a lock

Protect the list of processes with a mutex.  Part of bproc() is split out
into into bnode_DeleteProc() which makes bproc() a bit easier to read, and
fixes a leak of the token list associated with the bnode_proc entry.
Cron bnodes ops should probably be rewritten to eliminate the need to
export this lock.

Change-Id: I32e7d45e92b4d197aacfa5a79b947566a2c50712
bozo: update delete flag only in Bnode_Delete()

For consistency, only modify the BNODE_DELETE flag in bnode_Delete().

Change-Id: I58dd90418521553ef968494d0593d2a47fa7bc69
bozo: add pthread support for sleeping on a bnode

Create bnode_Wait()--the other half of bnode_Check()--and add support
for pthreads.  Eliminate spurious global bnode_waiting.

Change-Id: I8ebc81e7265826cd3ead67f1dcaf0e8ac7e52afc
bozo: pthread locking for bnodes list

bnode_Hold() is used to take a reference on a bnode before unlocking the
list.  bnode_Release() is used to drop any reference and must be called
with the bnode list unlocked.  bnode_Create() and bnode_FindInstance()
now return a referenced bnode which should be dropped via bnode_Release().

There is an additional lock to protect additions to the head of the list;
modify bnode_ApplyInstance() and bnode_WaitAll() to take it while processing
bnodes, to prevent deadlocks with bproc().

WriteBozoFile() is modified to directly iterate the bnode list to avoid
dropping the bnode list lock.  This prevents changes while writing the
configuration file.

Change-Id: I2ff9520317b934cda7ea9051dea57166410b97a7
bozo: add build support for pthreaded bosserver

Add tbozo which is used to build the threaded bozo version.

Change-Id: I4f17df97c3bba319e13442ecafe09d81d1202ff6
bozo: handle signals directly instead of using softsig

To avoid problems with signal handling in LinuxThreads, each bnode_proc
is run in its own unique thread.  This avoids handling SIGCHLD in a
single separate thread.  SIGTERM, SIGQUIT and SIGFPE are handled in
a single thread via sigwait.  For LinuxThreads, you will need to use
killall bosserver or kill -pid to signal the entire process group.
LWP cannot use this scheme, since waitpid() is not LWP aware.

Change-Id: I2c679e83835910df7dc6b3a0b6573face9676284
bozo: Split thread creation into bnode_InitProcs()

This lets us stay single-threaded longer in bosserver startup, for
better time-domain locking.

Change-Id: Ifb02232c56cc9b9719388f74faddcf3d7052269b
tbozo: build (and use) liboafs_bos.la

Why not?

Change-Id: I594d54037d7e42480ab0354a937093a28bce2149