Hi, This patch series has many improvements for the Hurd signal code in glibc. I cc: libc-alpha for your information only, at this point I'm not asking for them to be merged upstream yet.
The main goal of this series is to implement global signal dispositions on Hurd, which is necessay for POSIX conformance of libpthread (see the details in commit messages). In particular, libgcj relies on a correct implementation in this regard, which causes "ant" (the "make" of the Java world) to hang waiting for child processes to terminate. Prior to implementing this, I refactored the code to make it somewhat easier to follow, and fixed a few bugs I ran into. Any kind of feedback would be great of course, but in particular I'm wondering about: * Signal preemptors. What are they used for and should they be made global as well? * I'm not completely sure what spawni() is for, but it seems the child process it create inherits the parent's pending signals. Is this intended? * Symbol versions. I used GLIBC_2.13 for the new interfaces but I'm not completely sure what the policy is. I'll be posting the related changes to Hurd's libpthread right after I send this series. If you would like to test these patches, I have built glibc and hurd (for libpthread) Debian packages with these changes, which are available at the following repository: deb http://jk.fr.eu.org/debian experimental/ (The glibc package uses slightly different patches with regards to the symbol versions. I'll build and upload a new version soon) Acknowledgement: I started working on this a few months ago but I am finishing it as a Google Summer of Code student for the GNU project, as part of my proposal to improve Java support on Hurd [1]. I have assigned copyright to the FSF for past and future changes to both glibc and hurd. [1] See http://www.bddebian.com/~hurd-web/user/jkoenig/java. Jeremie Koenig (8): _hurd_internal_post_signal: Split into more functions _hurd_internal_post_signal: Scope variables more restrictively _hurd_internal_post_signal: Split out inner functions Hurd signal cleanup: refactor check_pending_signals Hurd signals: reindent Hurd signals: make sigsuspend POSIX-conformant. Hurd signals: fix uninitialized value. Hurd signals: implement global signal dispositions Versions.def | 1 + hurd/Versions | 7 + hurd/hurd/signal.h | 35 +++- hurd/hurdmsg.c | 12 +- hurd/hurdsig.c | 446 +++++++++++++++++++++++++-------------- sysdeps/mach/hurd/fork.c | 19 +- sysdeps/mach/hurd/sigaction.c | 16 +- sysdeps/mach/hurd/sigpending.c | 6 +- sysdeps/mach/hurd/sigprocmask.c | 8 +- sysdeps/mach/hurd/sigsuspend.c | 15 +- sysdeps/mach/hurd/sigwait.c | 11 +- sysdeps/mach/hurd/spawni.c | 23 ++- 12 files changed, 382 insertions(+), 217 deletions(-)