On Tue, Feb 28, 2012, at 05:30 AM, Jenkins wrote: > See <http://ci.cyrusimap.org/job/cyrus-imapd-master/420/changes> > > Changes: > > [gnb] Bug 3648 - lib/signals.c handles multiple signals > > [gnb] Bug 3648 - master handles SIGQUIT synchronously > > [gnb] master: don't busyloop after SIGQUIT > > [gnb] Remove unused dead definitions of printstring() > > [gnb] autobuild.sh: show any leaked processes > > [gnb] cyr_expire: better signal handling > > [gnb] idled: better signal handling > > [gnb] lib/signals.c: better signal handling > > [gnb] Bug 3100 master: handle SIGTERM synchronously > > ------------------------------------------ > [...truncated 2175 lines...] > > http://ci.cyrusimap.org/job/cyrus-imapd-master/420//testReport/%28root%29/Cassandane__Cyrus__Metadata/test_msg_sort_search/ > > Cassandane::Cyrus::Metadata.permessage_getset > > http://ci.cyrusimap.org/job/cyrus-imapd-master/420//testReport/%28root%29/Cassandane__Cyrus__Metadata/test_permessage_getset/ > > [...] > > 163 run, 1 failures, 110 errors > + ps -u cyrus > PID TTY TIME CMD > 30355 ? 00:00:00 imapd > 31085 ? 00:00:00 imapd > 31209 ? 00:00:00 master > 31254 ? 00:00:00 master > 31399 ? 00:00:00 imapd > 31400 ? 00:00:00 imapd > 31451 ? 00:00:00 imapd > 31452 ? 00:00:00 imapd > 31460 ? 00:00:00 master > 31466 ? 00:00:00 imapd > 31474 ? 00:00:00 master > 31480 ? 00:00:00 imapd
So what happened here is that my commit "lib/signals.c: better signal handling" wasn't quite right; it installed a handler for SIGTERM but with the SA_RESTART sigaction flag, which causes the main idle loop to silently restart the select() call instead of failing with EINTR, which means imapd never notices that master is telling it to shut down gracefully. Woops. Fixed in http://git.cyrusimap.org/cyrus-imapd/commit/?id=079c745f1ed60784c8567540a11c0947712b0fbd -- Greg.