smb_shr_cache
static smb_shr_cache_t smb_shr_cache;
(void) mutex_lock(&smb_shr_cache.sc_mtx);
switch (smb_shr_cache.sc_state) {
smb_shr_cache.sc_cache = ht_create_table(SMB_SHR_HTAB_SZ,
if (smb_shr_cache.sc_cache == NULL) {
(void) ht_set_cmpfn(smb_shr_cache.sc_cache,
(void) ht_register_callback(smb_shr_cache.sc_cache,
smb_shr_cache.sc_nops = 0;
smb_shr_cache.sc_state = SMB_SHR_CACHE_STATE_CREATED;
(void) mutex_unlock(&smb_shr_cache.sc_mtx);
(void) mutex_lock(&smb_shr_cache.sc_mtx);
if (smb_shr_cache.sc_state == SMB_SHR_CACHE_STATE_CREATED) {
smb_shr_cache.sc_state = SMB_SHR_CACHE_STATE_DESTROYING;
while (smb_shr_cache.sc_nops > 0)
(void) cond_wait(&smb_shr_cache.sc_cv,
&smb_shr_cache.sc_mtx);
smb_shr_cache.sc_cache = NULL;
smb_shr_cache.sc_state = SMB_SHR_CACHE_STATE_NONE;
(void) mutex_unlock(&smb_shr_cache.sc_mtx);
(void) mutex_lock(&smb_shr_cache.sc_mtx);
if (smb_shr_cache.sc_state != SMB_SHR_CACHE_STATE_CREATED) {
(void) mutex_unlock(&smb_shr_cache.sc_mtx);
smb_shr_cache.sc_nops++;
(void) mutex_unlock(&smb_shr_cache.sc_mtx);
(void) rw_rdlock(&smb_shr_cache.sc_cache_lck);
(void) rw_wrlock(&smb_shr_cache.sc_cache_lck);
(void) mutex_lock(&smb_shr_cache.sc_mtx);
assert(smb_shr_cache.sc_nops > 0);
smb_shr_cache.sc_nops--;
(void) cond_broadcast(&smb_shr_cache.sc_cv);
(void) mutex_unlock(&smb_shr_cache.sc_mtx);
(void) rw_unlock(&smb_shr_cache.sc_cache_lck);
return (ht_get_total_items(smb_shr_cache.sc_cache));
item = ht_find_item(smb_shr_cache.sc_cache, sharename);
item = ht_findfirst(smb_shr_cache.sc_cache, &shi->si_hashiter);
if (ht_add_item(smb_shr_cache.sc_cache, cache_ent->shr_name, cache_ent)
(void) ht_remove_item(smb_shr_cache.sc_cache, sharename);