diff options
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp_input.c')
-rw-r--r-- | usr/src/uts/common/inet/tcp/tcp_input.c | 11 |
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; } /* |