]> git.hungrycats.org Git - linux/commitdiff
Revert signal handling changes in tcp.c - they break SIGURG.
authorDavid S. Miller <davem@nuts.ninka.net>
Sun, 26 Oct 2003 16:28:16 +0000 (08:28 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Sun, 26 Oct 2003 16:28:16 +0000 (08:28 -0800)
Cset exclude: kuznet@ms2.inr.ac.ru|ChangeSet|20031021052951|52463

net/ipv4/tcp.c

index 1da4fa8de355996a0a0381ee7c2157029001fd7d..6f3331d6b9f1cbc11a853c1fd4055b6110061b0f 100644 (file)
@@ -1540,6 +1540,17 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                if (copied && tp->urg_data && tp->urg_seq == *seq)
                        break;
 
+               /* We need to check signals first, to get correct SIGURG
+                * handling. FIXME: Need to check this doesn't impact 1003.1g
+                * and move it down to the bottom of the loop
+                */
+               if (signal_pending(current)) {
+                       if (copied)
+                               break;
+                       copied = timeo ? sock_intr_errno(timeo) : -EAGAIN;
+                       break;
+               }
+
                /* Next get a buffer. */
 
                skb = skb_peek(&sk->sk_receive_queue);
@@ -1576,7 +1587,6 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                            sk->sk_state == TCP_CLOSE ||
                            (sk->sk_shutdown & RCV_SHUTDOWN) ||
                            !timeo ||
-                           signal_pending(current) ||
                            (flags & MSG_PEEK))
                                break;
                } else {
@@ -1606,11 +1616,6 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                                copied = -EAGAIN;
                                break;
                        }
-
-                       if (signal_pending(current)) {
-                               copied = sock_intr_errno(timeo);
-                               break;
-                       }
                }
 
                cleanup_rbuf(sk, copied);