Don't clobber ERR with the msg_sig_post call when it's EBACKGROUND;
authorroland <roland>
Thu, 9 Feb 1995 08:57:21 +0000 (08:57 +0000)
committerroland <roland>
Thu, 9 Feb 1995 08:57:21 +0000 (08:57 +0000)
we need to notice that it is EBACKGROUND and retry the io_write.

hurd/fd-write.c

index fec2428..c9a3e70 100644 (file)
@@ -55,9 +55,15 @@ _hurd_fd_write (struct hurd_fd *fd, const void *buf, size_t *nbytes)
                 err = EIO;
               else
                 {
-                  /* Send a SIGTTOU signal to our process group.  */
-                  err = __USEPORT (CTTYID, _hurd_sig_post (0, SIGTTOU, port));
+                  /* Send a SIGTTOU signal to our process group.
+
+                     We must remember here not to clobber ERR, since
+                     the loop condition below uses it to recall that
+                     we should retry after a stop.  */
+
+                  __USEPORT (CTTYID, _hurd_sig_post (0, SIGTTOU, port));
                   /* XXX what to do if error here? */
+
                   /* At this point we should have just run the handler for
                      SIGTTOU or resumed after being stopped.  Now this is
                      still a "system call", so check to see if we should
@@ -68,6 +74,8 @@ _hurd_fd_write (struct hurd_fd *fd, const void *buf, size_t *nbytes)
                   __spin_unlock (&ss->lock);
                 }
             }
+          /* If the last io_write generated a SIGTTOU,
+             loop to try again to read some data.  */
         } while (err == EBACKGROUND);
        err;
      }));