Lines Matching refs:cp
118 fmd_ctl_t *cp = fmd_alloc(sizeof (fmd_ctl_t), FMD_SLEEP);
124 (void) pthread_mutex_init(&cp->ctl_lock, NULL);
125 (void) pthread_cond_init(&cp->ctl_cv, NULL);
127 cp->ctl_nvl = nvl;
128 cp->ctl_refs = 0;
131 cp->ctl_func = fmd_ctl_pause;
132 return (cp);
144 cp->ctl_func = vers > dp->cde_vers ? &fmd_ctl_inval : dp->cde_func;
145 return (cp);
149 fmd_ctl_fini(fmd_ctl_t *cp)
151 fmd_free(cp, sizeof (fmd_ctl_t));
159 fmd_ctl_hold(fmd_ctl_t *cp)
161 (void) pthread_mutex_lock(&cp->ctl_lock);
163 cp->ctl_refs++;
164 ASSERT(cp->ctl_refs != 0);
166 (void) pthread_mutex_unlock(&cp->ctl_lock);
175 fmd_ctl_rele(fmd_ctl_t *cp)
177 (void) pthread_mutex_lock(&cp->ctl_lock);
179 ASSERT(cp->ctl_refs != 0);
180 cp->ctl_refs--;
182 if (cp->ctl_refs == 0) {
183 cp->ctl_func(cp->ctl_nvl);
184 (void) pthread_cond_broadcast(&cp->ctl_cv);
186 while (cp->ctl_refs != 0)
187 (void) pthread_cond_wait(&cp->ctl_cv, &cp->ctl_lock);
190 (void) pthread_mutex_unlock(&cp->ctl_lock);