From 3e472e4c90096eb35884067b41293a47589ac431 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Mon, 20 Oct 2003 08:29:51 -0700 Subject: [PATCH] TCP: do not return -EINTR, when data are available for read() --- net/ipv4/tcp.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 6f3331d6b9f1c..1da4fa8de3559 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1540,17 +1540,6 @@ 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); @@ -1587,6 +1576,7 @@ 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 { @@ -1616,6 +1606,11 @@ 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); -- 2.53.0