summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/rpc/rpcmod.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/rpc/rpcmod.c')
-rw-r--r--usr/src/uts/common/rpc/rpcmod.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/usr/src/uts/common/rpc/rpcmod.c b/usr/src/uts/common/rpc/rpcmod.c
index b2e88186a5..7050f87739 100644
--- a/usr/src/uts/common/rpc/rpcmod.c
+++ b/usr/src/uts/common/rpc/rpcmod.c
@@ -27,8 +27,6 @@
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Kernel RPC filtering module
*/
@@ -2147,12 +2145,30 @@ mir_svc_release(queue_t *wq, mblk_t *mp)
* Start idle processing if this is the last reference.
*/
if ((mir->mir_ref_cnt == 1) && (mir->mir_inrservice == 0)) {
+ cmp = mir->mir_svc_pend_mp;
+ mir->mir_svc_pend_mp = NULL;
+ }
+
+ if (cmp) {
+ RPCLOG(16, "mir_svc_release: sending a held "
+ "disconnect/ord rel indication upstream on queue 0x%p\n",
+ (void *)RD(wq));
+
+ mutex_exit(&mir->mir_mutex);
+
+ putnext(RD(wq), cmp);
+
+ mutex_enter(&mir->mir_mutex);
+ }
+
+ /*
+ * Start idle processing if this is the last reference.
+ */
+ if (mir->mir_ref_cnt == 1 && mir->mir_inrservice == 0) {
RPCLOG(16, "mir_svc_release starting idle timer on 0x%p "
"because ref cnt is zero\n", (void *) wq);
- cmp = mir->mir_svc_pend_mp;
- mir->mir_svc_pend_mp = NULL;
mir_svc_idle_start(wq, mir);
}
@@ -2167,14 +2183,6 @@ mir_svc_release(queue_t *wq, mblk_t *mp)
cv_signal(&mir->mir_condvar);
mutex_exit(&mir->mir_mutex);
-
- if (cmp) {
- RPCLOG(16, "mir_svc_release: sending a held "
- "disconnect/ord rel indication upstream on queue 0x%p\n",
- (void *)RD(wq));
-
- putnext(RD(wq), cmp);
- }
}
/*