summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authormaheshvs <none@none>2006-10-30 15:49:38 -0800
committermaheshvs <none@none>2006-10-30 15:49:38 -0800
commit8f7c43ea4fce8efe0ba29f7acf163c28339d8d06 (patch)
tree6db52ba47d5e481a6beb926bcf59153e652545f7 /usr/src
parent68a5ac4d8bc02069d3928cb7cb89af02ef40ddc5 (diff)
downloadillumos-joyent-8f7c43ea4fce8efe0ba29f7acf163c28339d8d06.tar.gz
6444746 connmgr_dis_and_wait() loops forever preventing zone shutdown
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/rpc/clnt_cots.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/usr/src/uts/common/rpc/clnt_cots.c b/usr/src/uts/common/rpc/clnt_cots.c
index bf47961d9f..12f794bd94 100644
--- a/usr/src/uts/common/rpc/clnt_cots.c
+++ b/usr/src/uts/common/rpc/clnt_cots.c
@@ -1775,6 +1775,17 @@ use_new_conn:
*/
if ((cm_entry->x_state_flags & (X_DEAD|X_THREAD)) ==
X_DEAD) {
+ mutex_enter(&cm_entry->x_lock);
+ if (cm_entry->x_ref != 0) {
+ /*
+ * Currently in use.
+ * Cleanup later.
+ */
+ cmp = &cm_entry->x_next;
+ mutex_exit(&cm_entry->x_lock);
+ continue;
+ }
+ mutex_exit(&cm_entry->x_lock);
*cmp = cm_entry->x_next;
mutex_exit(&connmgr_lock);
connmgr_close(cm_entry);