I've encountered the problem where running rsync (client) from a child thread in
python causes rsync to complete the sync but never exit. After a lot of
debugging and frustration, it seems that python blocks all signals for any child
threads it creates. This has the side effect of blocking signals for all
processes that are fork()d and/or exec()d from that child thread.
While I would consider this instance a python bug (that is being fixed), it
might still be a good idea for rsync to defensively set a proper signal mask
since it relies on signals to communicate between the parent and child rsync
Fixing this means adding some new configure checks to determine the
signal-masking function that are available. Because of this, I have been
leaning toward making some larger changes to convert rsync over to using POSIX
signal-handling functions (with compatibility functions for systems that need
them). Thus, this will not get implemented until after the 2.6.5 bug-fix release.
I see rsync 2.6.6 is out. Any chance this made it in?
No. 2.6.6 was a bug-fix release, and thus wasn't an appropriate time to make
the big changes mentioned in comment #1. If someone would like to work on this,
let me know. Otherwise I'll get around to it eventually.
OK, I just checked in some changes that make rsync use sigaction() and sigprocmask() if they are available (otherwise signal() continues to be used).