Lines Matching refs:shp

272 	fmd_scheme_hash_t *shp;  in fmd_scheme_hash_create()  local
276 shp = fmd_alloc(sizeof (fmd_scheme_hash_t), FMD_SLEEP); in fmd_scheme_hash_create()
278 shp->sch_dirpath = fmd_strdup(path, FMD_SLEEP); in fmd_scheme_hash_create()
279 (void) pthread_rwlock_init(&shp->sch_rwlock, NULL); in fmd_scheme_hash_create()
280 shp->sch_hashlen = fmd.d_str_buckets; in fmd_scheme_hash_create()
281 shp->sch_hash = fmd_zalloc(sizeof (fmd_scheme_t *) * in fmd_scheme_hash_create()
282 shp->sch_hashlen, FMD_SLEEP); in fmd_scheme_hash_create()
287 shp->sch_hash[fmd_strhash(sp->sch_name) % shp->sch_hashlen] = sp; in fmd_scheme_hash_create()
289 return (shp); in fmd_scheme_hash_create()
293 fmd_scheme_hash_destroy(fmd_scheme_hash_t *shp) in fmd_scheme_hash_destroy() argument
298 for (i = 0; i < shp->sch_hashlen; i++) { in fmd_scheme_hash_destroy()
299 for (sp = shp->sch_hash[i]; sp != NULL; sp = np) { in fmd_scheme_hash_destroy()
302 fmd_scheme_hash_release(shp, sp); in fmd_scheme_hash_destroy()
306 fmd_free(shp->sch_hash, sizeof (fmd_scheme_t *) * shp->sch_hashlen); in fmd_scheme_hash_destroy()
307 fmd_strfree(shp->sch_dirpath); in fmd_scheme_hash_destroy()
308 fmd_free(shp, sizeof (fmd_scheme_hash_t)); in fmd_scheme_hash_destroy()
312 fmd_scheme_hash_trygc(fmd_scheme_hash_t *shp) in fmd_scheme_hash_trygc() argument
317 if (shp == NULL || pthread_rwlock_trywrlock(&shp->sch_rwlock) != 0) in fmd_scheme_hash_trygc()
320 for (i = 0; i < shp->sch_hashlen; i++) { in fmd_scheme_hash_trygc()
321 for (sp = shp->sch_hash[i]; sp != NULL; sp = np) { in fmd_scheme_hash_trygc()
324 fmd_scheme_hash_release(shp, sp); in fmd_scheme_hash_trygc()
328 bzero(shp->sch_hash, sizeof (fmd_scheme_t *) * shp->sch_hashlen); in fmd_scheme_hash_trygc()
329 (void) pthread_rwlock_unlock(&shp->sch_rwlock); in fmd_scheme_hash_trygc()
347 fmd_scheme_hash_xlookup(fmd_scheme_hash_t *shp, const char *name, uint_t h) in fmd_scheme_hash_xlookup() argument
351 ASSERT(RW_LOCK_HELD(&shp->sch_rwlock)); in fmd_scheme_hash_xlookup()
353 for (sp = shp->sch_hash[h]; sp != NULL; sp = sp->sch_next) { in fmd_scheme_hash_xlookup()
368 fmd_scheme_hash_lookup(fmd_scheme_hash_t *shp, const char *name) in fmd_scheme_hash_lookup() argument
378 (void) pthread_rwlock_rdlock(&shp->sch_rwlock); in fmd_scheme_hash_lookup()
379 h = fmd_strhash(name) % shp->sch_hashlen; in fmd_scheme_hash_lookup()
381 if ((sp = fmd_scheme_hash_xlookup(shp, name, h)) == NULL) { in fmd_scheme_hash_lookup()
382 (void) pthread_rwlock_unlock(&shp->sch_rwlock); in fmd_scheme_hash_lookup()
384 (void) pthread_rwlock_wrlock(&shp->sch_rwlock); in fmd_scheme_hash_lookup()
386 if ((sp = fmd_scheme_hash_xlookup(shp, name, h)) == NULL) { in fmd_scheme_hash_lookup()
387 nsp->sch_next = shp->sch_hash[h]; in fmd_scheme_hash_lookup()
388 shp->sch_hash[h] = sp = nsp; in fmd_scheme_hash_lookup()
390 fmd_scheme_hash_release(shp, nsp); in fmd_scheme_hash_lookup()
400 (void) pthread_rwlock_unlock(&shp->sch_rwlock); in fmd_scheme_hash_lookup()
411 "%s/%s.so", shp->sch_dirpath, sp->sch_name); in fmd_scheme_hash_lookup()
454 fmd_scheme_hash_release(fmd_scheme_hash_t *shp, fmd_scheme_t *sp) in fmd_scheme_hash_release() argument