Tue May 7 10:51:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
authorroland <roland>
Tue, 7 May 1996 14:57:18 +0000 (14:57 +0000)
committerroland <roland>
Tue, 7 May 1996 14:57:18 +0000 (14:57 +0000)
* hurd/hurdsig.c: Use struct hurd_signal_detail.
* hurd/hurd/fd.h (_hurd_fd_error): Likewise.
* sysdeps/mach/hurd/sysd-stdio.c (fd_fail): Likewise.

hurd/hurd/fd.h
hurd/hurdsig.c
sysdeps/mach/hurd/sysd-stdio.c

index 4747c78..b6402ea 100644 (file)
@@ -1,5 +1,5 @@
 /* File descriptors.
-Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
+Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -153,14 +153,18 @@ _hurd_fd_error_signal (error_t err)
 
 /* Handle an error from an RPC on a file descriptor's port.  You should
    always use this function to handle errors from RPCs made on file
-   descriptor ports.  Some errors are translated into signals.  */   
+   descriptor ports.  Some errors are translated into signals.  */
 
 _EXTERN_INLINE error_t
 _hurd_fd_error (int fd, error_t err)
 {
   int signo = _hurd_fd_error_signal (err);
   if (signo)
-    _hurd_raise_signal (NULL, signo, fd, err);
+    {
+      const struct hurd_signal_detail detail
+       = { code: fd, error: err, exc: 0 };
+      _hurd_raise_signal (NULL, signo, &detail);
+    }
   return err;
 }
 
index b1a551d..2a517cf 100644 (file)
@@ -428,7 +428,7 @@ sigset_t _hurdsig_preempted_set;
 /* Deliver a signal.  SS is not locked.  */
 void
 _hurd_internal_post_signal (struct hurd_sigstate *ss,
-                           int signo, long int sigcode, int sigerror,
+                           int signo, struct hurd_signal_detail *detail,
                            mach_port_t reply_port,
                            mach_msg_type_name_t reply_port_type,
                            int untraced)
@@ -459,10 +459,9 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss,
   void mark_pending (void)
     {
       __sigaddset (&ss->pending, signo);
-      /* Save the code to be given to the handler when SIGNO is
+      /* Save the details to be given to the handler when SIGNO is
         unblocked.  */
-      ss->pending_data[signo].code = sigcode;
-      ss->pending_data[signo].error = sigerror;
+      ss->pending_data[signo] = *detail;
     }
 
   /* Suspend the process with SIGNO.  */
@@ -540,8 +539,8 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss,
 
   handler = SIG_ERR;
   for (pe = ss->preempters; pe && handler == SIG_ERR; pe = pe->next)
-    if (HURD_PREEMPT_SIGNAL_P (pe, signo, sigcode))
-      handler = (*pe->preempter) (pe, ss, &signo, &sigcode, &sigerror);
+    if (HURD_PREEMPT_SIGNAL_P (pe, signo, detail->code))
+      handler = (*pe->preempter) (pe, ss, &signo, detail);
 
   if (handler == SIG_ERR && (__sigmask (signo) & _hurdsig_preempted_set))
     {
@@ -1061,14 +1060,18 @@ _S_msg_sig_post (mach_port_t me,
                 mach_port_t refport)
 {
   error_t err;
+  struct hurd_signal_detail d;
 
   if (err = signal_allowed (signo, refport))
     return err;
 
+  d.code = sigcode;
+  d.exc = 0;
+
   /* Post the signal to the designated signal-receiving thread.  This will
      reply when the signal can be considered delivered.  */
   _hurd_internal_post_signal (_hurd_thread_sigstate (_hurd_sigthread),
-                             signo, sigcode, 0, reply_port, reply_port_type,
+                             signo, &d, reply_port, reply_port_type,
                              0); /* Stop if traced.  */
 
   return MIG_NO_REPLY;         /* Already replied.  */
@@ -1085,14 +1088,18 @@ _S_msg_sig_post_untraced (mach_port_t me,
                          mach_port_t refport)
 {
   error_t err;
+  struct hurd_signal_detail d;
 
   if (err = signal_allowed (signo, refport))
     return err;
 
+  d.code = sigcode;
+  d.exc = 0;
+
   /* Post the signal to the designated signal-receiving thread.  This will
      reply when the signal can be considered delivered.  */
   _hurd_internal_post_signal (_hurd_thread_sigstate (_hurd_sigthread),
-                             signo, sigcode, 0, reply_port, reply_port_type,
+                             signo, &d, reply_port, reply_port_type,
                              1); /* Untraced flag. */
 
   return MIG_NO_REPLY;         /* Already replied.  */
index 85dd04b..c4bcf73 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -34,7 +34,11 @@ fd_fail (struct hurd_fd *fd, error_t err)
 {
   int signo = _hurd_fd_error_signal (err);
   if (signo)
-    _hurd_raise_signal (NULL, signo, __stdio_fileno (fd), err);
+    {
+      const struct hurd_signal_detail detail
+       = { code: __stdio_fileno (fd), error: err, exc: 0 };
+      _hurd_raise_signal (NULL, signo, &detail);
+    }
   errno = err;
   return -1;
 }