Mercurial > illumos > illumos-gate
changeset 14102:971fb4176acf
3939 parent rn_lock being held across calls to rc_hold
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Eric Schrock <eric.schrock@delphix.com>
Approved by: Dan McDonald <danmcd@nexenta.com>
author | Robert Mustacchi <rm@joyent.com> |
---|---|
date | Tue, 19 Mar 2013 00:16:09 +0000 |
parents | d267bde9b5cf |
children | f0150cf47680 |
files | usr/src/cmd/svc/configd/rc_node.c |
diffstat | 1 files changed, 21 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/svc/configd/rc_node.c Thu Feb 28 07:21:34 2013 +0000 +++ b/usr/src/cmd/svc/configd/rc_node.c Tue Mar 19 00:16:09 2013 +0000 @@ -21,6 +21,7 @@ /* * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. */ /* @@ -6534,7 +6535,15 @@ } if (pg == NULL) { + (void) pthread_mutex_unlock(&np->rn_lock); rc_node_rele(res); + (void) pthread_mutex_lock(&np->rn_lock); + if (!rc_node_wait_flag(np, RC_NODE_DYING)) { + (void) pthread_mutex_unlock(&np-> + rn_lock); + rc_node_clear(out, 1); + return (REP_PROTOCOL_FAIL_DELETED); + } } else { rc_node_t *cpg; @@ -6557,9 +6566,21 @@ case REP_PROTOCOL_FAIL_TYPE_MISMATCH: /* Nevermind. */ + (void) pthread_mutex_unlock(&np-> + rn_lock); rc_node_destroy(cpg); rc_node_rele(pg); rc_node_rele(res); + (void) pthread_mutex_lock(&np-> + rn_lock); + if (!rc_node_wait_flag(np, + RC_NODE_DYING)) { + (void) pthread_mutex_unlock(& + np->rn_lock); + rc_node_clear(out, 1); + return + (REP_PROTOCOL_FAIL_DELETED); + } break; case REP_PROTOCOL_FAIL_NO_RESOURCES: