diff options
author | Ramesh Kumar Katla <Ramesh.K@Sun.COM> | 2010-06-21 16:16:00 -0700 |
---|---|---|
committer | Ramesh Kumar Katla <Ramesh.K@Sun.COM> | 2010-06-21 16:16:00 -0700 |
commit | a5628610b3cb18335f49944f353e3be7b9e669f4 (patch) | |
tree | 3e8e2927a3a02b6da4a216b37bb190745a0cd3bd /usr/src | |
parent | f970887035084ffc66d633763104257174c8c502 (diff) | |
download | illumos-gate-a5628610b3cb18335f49944f353e3be7b9e669f4.tar.gz |
6960474 assertion failed: (connp)->conn_ioctlref != 0, file: ../../common/inet/ip/ip.c, line: 12588
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/inet/ip/ip_if.c | 11 | ||||
-rw-r--r-- | usr/src/uts/common/inet/ip/ip_rts.c | 4 | ||||
-rw-r--r-- | usr/src/uts/common/inet/ip/ipclassifier.c | 1 |
3 files changed, 11 insertions, 5 deletions
diff --git a/usr/src/uts/common/inet/ip/ip_if.c b/usr/src/uts/common/inet/ip/ip_if.c index c74a21173e..689c66d66a 100644 --- a/usr/src/uts/common/inet/ip/ip_if.c +++ b/usr/src/uts/common/inet/ip/ip_if.c @@ -8551,15 +8551,16 @@ ip_sioctl_plink(ipsq_t *ipsq, queue_t *q, mblk_t *mp, void *dummy_arg) err = ip_sioctl_plink_ipmod(ipsq, q, mp, ioccmd, li); if (err == EINPROGRESS) return; -done: if (err == 0) miocack(q, mp, 0, 0); else miocnak(q, mp, 0, err); /* Conn was refheld in ip_sioctl_copyin_setup */ - if (CONN_Q(q)) + if (CONN_Q(q)) { + CONN_DEC_IOCTLREF(Q_TO_CONN(q)); CONN_OPER_PENDING_DONE(Q_TO_CONN(q)); + } } /* @@ -9150,8 +9151,10 @@ ip_sioctl_copyin_setup(queue_t *q, mblk_t *mp) * Request can be enqueued in the 'ipsq' while waiting * to become exclusive. So bump up the conn ref. */ - if (CONN_Q(q)) + if (CONN_Q(q)) { CONN_INC_REF(Q_TO_CONN(q)); + CONN_INC_IOCTLREF(Q_TO_CONN(q)) + } ip_sioctl_plink(NULL, q, mp, NULL); return; @@ -11690,6 +11693,7 @@ ip_wput_ioctl(queue_t *q, mblk_t *mp) ASSERT(CONN_Q(q)); connp = Q_TO_CONN(q); CONN_INC_REF(connp); + CONN_INC_IOCTLREF(connp); if (ipft->ipft_pfi && ((mp1->b_wptr - mp1->b_rptr) >= ipft->ipft_min_size || pullupmsg(mp1, ipft->ipft_min_size))) { @@ -11704,6 +11708,7 @@ ip_wput_ioctl(queue_t *q, mblk_t *mp) return; } + CONN_DEC_IOCTLREF(connp); CONN_OPER_PENDING_DONE(connp); if (ipft->ipft_flags & IPFT_F_NO_REPLY) { freemsg(mp); diff --git a/usr/src/uts/common/inet/ip/ip_rts.c b/usr/src/uts/common/inet/ip/ip_rts.c index a37ef9a754..dece7be29d 100644 --- a/usr/src/uts/common/inet/ip/ip_rts.c +++ b/usr/src/uts/common/inet/ip/ip_rts.c @@ -1,6 +1,5 @@ /* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. */ /* @@ -1206,6 +1205,7 @@ done: (connp->conn_recv)(connp, ioc_mp, NULL, NULL); /* conn was refheld in ip_wput_ioctl. */ + CONN_DEC_IOCTLREF(connp); CONN_OPER_PENDING_DONE(connp); return (error); diff --git a/usr/src/uts/common/inet/ip/ipclassifier.c b/usr/src/uts/common/inet/ip/ipclassifier.c index 3d4cbd52ae..bc2173ff24 100644 --- a/usr/src/uts/common/inet/ip/ipclassifier.c +++ b/usr/src/uts/common/inet/ip/ipclassifier.c @@ -635,6 +635,7 @@ ipcl_conn_destroy(conn_t *connp) ASSERT(!MUTEX_HELD(&connp->conn_lock)); ASSERT(connp->conn_ref == 0); + ASSERT(connp->conn_ioctlref == 0); DTRACE_PROBE1(conn__destroy, conn_t *, connp); |