"The multithreaded butc (src/tbutc/butc) includes bucoord/status.o, which is
compiled together with the other bucoord stuff without MT_CFLAGS and hence
without AFS_PTHREAD_ENV defined. Alas, it uses ObtainWriteLock and other
macros out of lock.h which *are* sensitive to AFS_PTHREAD_ENV. Consequently,
butc can hang trying to acquire the statusQueueLock when dumping volumes, in
particular if 'backup status' commands are issued frequently.
A proper fix would probably be to push some of those macros out of lock.h and
make them subroutines in lock.c.
A quick fix is ensuring status.c gets recompiled in tbutc/Makefile.in"
(cherry picked from commit
fd2cb884e24b5bf48392db4222ee10125014a3ee)
VOLSER = ../volser
BUCOORDOBJS=ubik_db_if.o ${BUCOORD}/volstub.o ${BUCOORD}/dlq.o \
- ${BUCOORD}/status.o ${BUCOORD}/bucoord_errs.o
+ status.o ${BUCOORD}/bucoord_errs.o
VOLSERLIBOBJ=${VOLSER}/volint.cs.o vsprocs.o ${VOLSER}/vsutils.o \
${VOLSER}/lockprocs.o ${VOLSER}/volint.xdr.o ${VOLSER}/volerr.o \
ubik_db_if.o: ${BUCOORD}/ubik_db_if.c
${CC} ${CFLAGS} -c ${BUCOORD}/ubik_db_if.c
+status.o: ${BUCOORD}/status.c
+ ${CC} ${CFLAGS} -c ${BUCOORD}/status.c
+
vsprocs.o: ${VOLSER}/vsprocs.c
${CC} ${CFLAGS} -c ${VOLSER}/vsprocs.c