diff options
author | georges <none@none> | 2006-12-15 04:09:14 -0800 |
---|---|---|
committer | georges <none@none> | 2006-12-15 04:09:14 -0800 |
commit | a644aa6f4739bce6d579237b166673ef07180ebf (patch) | |
tree | 25761babf62f6c2f0639f98b9314a7447e65c22f /usr/src/uts/common/inet/tcp | |
parent | 9d9461f978f27132308c8a01d284c8f75bf4439d (diff) | |
download | illumos-joyent-a644aa6f4739bce6d579237b166673ef07180ebf.tar.gz |
6401916 Retransmission on closing connections is not handled properly.
Diffstat (limited to 'usr/src/uts/common/inet/tcp')
-rw-r--r-- | usr/src/uts/common/inet/tcp/tcp.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp.c b/usr/src/uts/common/inet/tcp/tcp.c index 6e7fa81d17..d19faf593c 100644 --- a/usr/src/uts/common/inet/tcp/tcp.c +++ b/usr/src/uts/common/inet/tcp/tcp.c @@ -11759,7 +11759,17 @@ tcp_rput_common(tcp_t *tcp, mblk_t *mp) freemsg(mp); return; default: - break; + /* + * tcp_icmp_err() will process the M_CTL packets. + * Non-ICMP packets, if any, will be discarded in + * tcp_icmp_err(). We will process the ICMP packet + * even if we are TCP_IS_DETACHED_NONEAGER as the + * incoming ICMP packet may result in changing + * the tcp_mss, which we would need if we have + * packets to retransmit. + */ + tcp_icmp_error(tcp, mp); + return; } } @@ -15717,17 +15727,13 @@ tcp_rput_other(tcp_t *tcp, mblk_t *mp) break; } break; - case M_CTL: - /* - * ICMP messages. - */ - tcp_icmp_error(tcp, mp); - return; case M_FLUSH: if (*rptr & FLUSHR) flushq(q, FLUSHDATA); break; default: + /* M_CTL will be directly sent to tcp_icmp_error() */ + ASSERT(DB_TYPE(mp) != M_CTL); break; } /* |