summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp/tcp_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp_input.c')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp_input.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp_input.c b/usr/src/uts/common/inet/tcp/tcp_input.c
index a57bb333df..831ebc7ba5 100644
--- a/usr/src/uts/common/inet/tcp/tcp_input.c
+++ b/usr/src/uts/common/inet/tcp/tcp_input.c
@@ -3618,9 +3618,20 @@ process_ack:
CONN_INC_REF(connp);
if (!tcp_newconn_notify(tcp, ira)) {
+ /*
+ * The state-change probe for SYN_RCVD ->
+ * ESTABLISHED has not fired yet. We reset
+ * the state to SYN_RCVD so that future
+ * state-change probes report correct state
+ * transistions.
+ */
+ tcp->tcp_state = TCPS_SYN_RCVD;
freemsg(mp);
/* notification did not go up, so drop ref */
CONN_DEC_REF(connp);
+ /* ... and close the eager */
+ ASSERT(TCP_IS_DETACHED(tcp));
+ (void) tcp_close_detached(tcp);
return;
}
/*