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 process.
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).