cyrus 2.4 deadlock identified: SIGALRM race

Thomas Jarosch thomas.jarosch at
Tue Sep 1 12:35:10 EDT 2015

On Tuesday, 1. September 2015 14:31:23 Thomas Jarosch wrote:
> ------------------------------
> commit 17eb391b918c394319e4d1fe5985de10128f34d7
> Author: Greg Banks <gnb at>
> Date:   Fri Mar 23 17:27:32 2012 +1100
>     idle: don't use signals, use AF_UNIX dgrams
>     Communications back from idled to imapds are via a message sent on the
> AF_UNIX socket.  The IDLE command is implemented as a select() loop, and
> there's absolutely nothing that needs to be done in signal handler
> context.  Best of all, no more unexpected delivery of SIGUSR1 or
> SIGUSER2, assassinating innocent bystander processes.
> ------------------------------

it looks like the changes to idle.c / idled.c / idlemsg.c can easily be 
backported (=cherry-picked) to 2.4. Many of them apply without
any manual changes needed.

For a quick test I've already cherry-picked these commits to 2.4:
6c66fea idle: shut down on SIGQUIT
490245b idle: don't do FD_ISSET(-1,) it's unhelpful
d3b4d40 idle: unlink local AF_UNIX socket when done
215ded8 idle: rename notify_sock -> idle_sock
e0a2ae7 idle: don't use signals, use AF_UNIX dgrams
b03bacf idle: centralise AF_UNIX socket creation
060892e idle: move message send/recv into a common file
a072b0b idle: rename idle_data_t -> idle_message_t
47bf369 idle: better function names in idled
5beb409 idle: some const correctness
7bfe482 idle: remove "freelist" ientry memory management
8ebce36 idle: rename messages IDLE_FOO -> IDLE_MSG_FOO
c302829 idle: whitespace cleanup

This was just a rough try, I'll compile a more complete
list of needed changes. If I get this up and running, I'll send
a git pull request for 2.4 to fix this nasty issue.


More information about the Cyrus-devel mailing list