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); } /*