Print this page
XXXXX convert NLM's single-count semaphore to a mutex
*** 861,871 ****
NSM_ADDR_V1, 0, NLM_RPC_RETRIES, zone_kcred(),
&nsm->ns_addr_handle);
if (error != 0)
goto error;
! sema_init(&nsm->ns_sem, 1, NULL, SEMA_DEFAULT, NULL);
return (0);
error:
kmem_free(nsm->ns_addr.buf, nsm->ns_addr.maxlen);
if (nsm->ns_handle) {
--- 861,871 ----
NSM_ADDR_V1, 0, NLM_RPC_RETRIES, zone_kcred(),
&nsm->ns_addr_handle);
if (error != 0)
goto error;
! mutex_init(&nsm->ns_lock, NULL, MUTEX_DEFAULT, NULL);
return (0);
error:
kmem_free(nsm->ns_addr.buf, nsm->ns_addr.maxlen);
if (nsm->ns_handle) {
*** 887,908 ****
nsm->ns_addr_handle = NULL;
if (nsm->ns_handle->cl_auth != NULL)
auth_destroy(nsm->ns_handle->cl_auth);
CLNT_DESTROY(nsm->ns_handle);
nsm->ns_handle = NULL;
! sema_destroy(&nsm->ns_sem);
}
static enum clnt_stat
nlm_nsm_simu_crash(struct nlm_nsm *nsm)
{
enum clnt_stat stat;
! sema_p(&nsm->ns_sem);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_simu_crash_1(NULL, NULL, nsm->ns_handle);
! sema_v(&nsm->ns_sem);
return (stat);
}
static enum clnt_stat
--- 887,908 ----
nsm->ns_addr_handle = NULL;
if (nsm->ns_handle->cl_auth != NULL)
auth_destroy(nsm->ns_handle->cl_auth);
CLNT_DESTROY(nsm->ns_handle);
nsm->ns_handle = NULL;
! mutex_destroy(&nsm->ns_lock);
}
static enum clnt_stat
nlm_nsm_simu_crash(struct nlm_nsm *nsm)
{
enum clnt_stat stat;
! mutex_enter(&nsm->ns_lock);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_simu_crash_1(NULL, NULL, nsm->ns_handle);
! mutex_exit(&nsm->ns_lock);
return (stat);
}
static enum clnt_stat
*** 913,926 ****
enum clnt_stat stat;
args.mon_name = uts_nodename();
bzero(&res, sizeof (res));
! sema_p(&nsm->ns_sem);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_stat_1(&args, &res, nsm->ns_handle);
! sema_v(&nsm->ns_sem);
if (stat == RPC_SUCCESS)
*out_stat = res.state;
return (stat);
--- 913,926 ----
enum clnt_stat stat;
args.mon_name = uts_nodename();
bzero(&res, sizeof (res));
! mutex_enter(&nsm->ns_lock);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_stat_1(&args, &res, nsm->ns_handle);
! mutex_exit(&nsm->ns_lock);
if (stat == RPC_SUCCESS)
*out_stat = res.state;
return (stat);
*** 941,954 ****
args.mon_id.my_id.my_prog = NLM_PROG;
args.mon_id.my_id.my_vers = NLM_SM;
args.mon_id.my_id.my_proc = NLM_SM_NOTIFY1;
bcopy(&priv, args.priv, sizeof (priv));
! sema_p(&nsm->ns_sem);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_mon_1(&args, &res, nsm->ns_handle);
! sema_v(&nsm->ns_sem);
return (stat);
}
static enum clnt_stat
--- 941,954 ----
args.mon_id.my_id.my_prog = NLM_PROG;
args.mon_id.my_id.my_vers = NLM_SM;
args.mon_id.my_id.my_proc = NLM_SM_NOTIFY1;
bcopy(&priv, args.priv, sizeof (priv));
! mutex_enter(&nsm->ns_lock);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_mon_1(&args, &res, nsm->ns_handle);
! mutex_exit(&nsm->ns_lock);
return (stat);
}
static enum clnt_stat
*** 965,978 ****
args.my_id.my_name = uts_nodename();
args.my_id.my_prog = NLM_PROG;
args.my_id.my_vers = NLM_SM;
args.my_id.my_proc = NLM_SM_NOTIFY1;
! sema_p(&nsm->ns_sem);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_unmon_1(&args, &res, nsm->ns_handle);
! sema_v(&nsm->ns_sem);
return (stat);
}
static enum clnt_stat
--- 965,978 ----
args.my_id.my_name = uts_nodename();
args.my_id.my_prog = NLM_PROG;
args.my_id.my_vers = NLM_SM;
args.my_id.my_proc = NLM_SM_NOTIFY1;
! mutex_enter(&nsm->ns_lock);
nlm_nsm_clnt_init(nsm->ns_handle, nsm);
stat = sm_unmon_1(&args, &res, nsm->ns_handle);
! mutex_exit(&nsm->ns_lock);
return (stat);
}
static enum clnt_stat
*** 984,997 ****
args.family = family;
args.name = name;
args.address = *address;
! sema_p(&nsm->ns_sem);
nlm_nsm_clnt_init(nsm->ns_addr_handle, nsm);
stat = nsmaddrproc1_reg_1(&args, &res, nsm->ns_addr_handle);
! sema_v(&nsm->ns_sem);
return (stat);
}
/*
--- 984,997 ----
args.family = family;
args.name = name;
args.address = *address;
! mutex_enter(&nsm->ns_lock);
nlm_nsm_clnt_init(nsm->ns_addr_handle, nsm);
stat = nsmaddrproc1_reg_1(&args, &res, nsm->ns_addr_handle);
! mutex_exit(&nsm->ns_lock);
return (stat);
}
/*