summaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/i386/sigreturn.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-04-02 22:08:59 +0000
committerRoland McGrath <roland@gnu.org>1995-04-02 22:08:59 +0000
commite607b492e56e2fc3c08e72d5a58349354a584cf2 (patch)
tree8e48c89250656dd4322f32248c3d5497ae148951 /sysdeps/mach/hurd/i386/sigreturn.c
parent193ce8dcd6c1eea5c68e6d4d8db2002c0085925b (diff)
Sun Apr 2 13:13:52 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/i386/trampoline.c: Add a link to SS->active_resources, so that _hurdsig_longjmp_from_handler will be called when a longjmp unwinds the signal frame. * sysdeps/mach/hurd/i386/sigreturn.c: Remove the link on the SS->active_resources chain added by _hurd_setup_sighandler. * hurd/sigunwind.c: New file. * hurd/Makefile (sig): Add sigunwind. * Makerules (lib%.so: lib%_pic.a): Remove dir name from $*. * MakeTAGS (tags-sources): Include $(all-dist). [subdir] (all-dist): Define to $(distribute).
Diffstat (limited to 'sysdeps/mach/hurd/i386/sigreturn.c')
-rw-r--r--sysdeps/mach/hurd/i386/sigreturn.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/i386/sigreturn.c b/sysdeps/mach/hurd/i386/sigreturn.c
index 19ba1d472c..d00fa7755f 100644
--- a/sysdeps/mach/hurd/i386/sigreturn.c
+++ b/sysdeps/mach/hurd/i386/sigreturn.c
@@ -28,6 +28,7 @@ int
__sigreturn (struct sigcontext *scp)
{
struct hurd_sigstate *ss;
+ struct hurd_userlink *link = (void *) &scp[1];
mach_port_t *reply_port;
if (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK))
@@ -39,6 +40,11 @@ __sigreturn (struct sigcontext *scp)
ss = _hurd_self_sigstate ();
__spin_lock (&ss->lock);
+ /* Remove the link on the `active resources' chain added by
+ _hurd_setup_sighandler. Its purpose was to make sure
+ that we got called; now we have, it is done. */
+ _hurd_userlink_unlink (link);
+
/* Restore the set of blocked signals, and the intr_port slot. */
ss->blocked = scp->sc_mask;
ss->intr_port = scp->sc_intr_port;