Lines Matching refs:table

61 __nis_init_hash_table(__nis_hash_table_mt *table,  in __nis_init_hash_table()  argument
66 if (table != 0) { in __nis_init_hash_table()
67 errorcode = pthread_mutex_init(&table->lock, 0); in __nis_init_hash_table()
74 errorcode = pthread_cond_init(&table->cond, 0); in __nis_init_hash_table()
81 errorcode = pthread_mutex_init(&table->traverser_id_lock, 0); in __nis_init_hash_table()
89 table->traversed = 0; in __nis_init_hash_table()
90 table->locked_items = 0; in __nis_init_hash_table()
91 (void) memset(table->keys, 0, sizeof (table->keys)); in __nis_init_hash_table()
92 table->first = 0; in __nis_init_hash_table()
93 table->destroyItem = itemDestructor; in __nis_init_hash_table()
98 __nis_lock_hash_table(__nis_hash_table_mt *table, int traverse, char *msg) { in __nis_lock_hash_table() argument
102 if (table != 0) { in __nis_lock_hash_table()
111 (void) pthread_mutex_lock(&table->lock); in __nis_lock_hash_table()
113 while ((table->traversed != 0 && in __nis_lock_hash_table()
114 table->traverser_id != myself) || in __nis_lock_hash_table()
115 table->locked_items != 0) { in __nis_lock_hash_table()
119 myself, table)); in __nis_lock_hash_table()
120 (void) pthread_cond_wait(&table->cond, in __nis_lock_hash_table()
121 &table->lock); in __nis_lock_hash_table()
124 (void) pthread_mutex_lock(&table->traverser_id_lock); in __nis_lock_hash_table()
126 table->traversed = 1; in __nis_lock_hash_table()
127 table->traverser_id = myself; in __nis_lock_hash_table()
128 (void) pthread_mutex_unlock(&table->traverser_id_lock); in __nis_lock_hash_table()
138 if (pthread_mutex_trylock(&table->lock) == EBUSY) { in __nis_lock_hash_table()
143 &table->traverser_id_lock); in __nis_lock_hash_table()
144 if (table->traversed != 0 && in __nis_lock_hash_table()
145 table->traverser_id == myself) { in __nis_lock_hash_table()
150 &table->traverser_id_lock); in __nis_lock_hash_table()
156 myself, table)); in __nis_lock_hash_table()
158 (void) pthread_mutex_lock(&table->lock); in __nis_lock_hash_table()
164 myself, traverse?"traverse":"non-traverse", table)); in __nis_lock_hash_table()
172 __nis_ulock_hash_table(__nis_hash_table_mt *table, int traverse, char *msg) { in __nis_ulock_hash_table() argument
176 if (table != 0) { in __nis_ulock_hash_table()
185 (void) pthread_mutex_lock(&table->traverser_id_lock); in __nis_ulock_hash_table()
187 if (table->traversed != 0 && in __nis_ulock_hash_table()
188 table->traverser_id == pthread_self()) { in __nis_ulock_hash_table()
189 table->traversed = 0; in __nis_ulock_hash_table()
198 (void) pthread_cond_signal(&table->cond); in __nis_ulock_hash_table()
200 (void) pthread_mutex_unlock(&table->traverser_id_lock); in __nis_ulock_hash_table()
208 (void) pthread_mutex_lock(&table->traverser_id_lock); in __nis_ulock_hash_table()
210 if (table->traversed == 0) { in __nis_ulock_hash_table()
213 (void) pthread_mutex_unlock(&table->traverser_id_lock); in __nis_ulock_hash_table()
217 (void) pthread_mutex_unlock(&table->lock); in __nis_ulock_hash_table()
221 pthread_self(), traverse?"traverse":"non-traverse", table, in __nis_ulock_hash_table()
230 __find_item_mt(nis_name name, __nis_hash_table_mt *table, int *keyp) { in __find_item_mt() argument
241 key %= (sizeof (table->keys) / sizeof (table->keys[0])); in __find_item_mt()
246 for (pp = &table->keys[key]; (it = *pp) != 0; pp = &it->next) { in __find_item_mt()
267 __nis_insert_item_mt(void *arg, __nis_hash_table_mt *table, int readwrite) { in __nis_insert_item_mt() argument
273 if (item == 0 || __nis_lock_hash_table(table, 0, "nitmt") == 0) in __nis_insert_item_mt()
276 if ((*(pp = __find_item_mt(item->name, table, &key))) != 0) { in __nis_insert_item_mt()
277 (void) __nis_ulock_hash_table(table, 0, "nitmt"); in __nis_insert_item_mt()
287 table->locked_items++; in __nis_insert_item_mt()
291 table->locked_items++; in __nis_insert_item_mt()
297 if (table->first) in __nis_insert_item_mt()
298 table->first->prv_item = item; in __nis_insert_item_mt()
300 item->nxt_item = table->first; in __nis_insert_item_mt()
302 table->first = item; in __nis_insert_item_mt()
304 (void) __nis_ulock_hash_table(table, 0, "nitmt"); in __nis_insert_item_mt()
310 __nis_insert_name_mt(nis_name name, __nis_hash_table_mt *table) { in __nis_insert_name_mt() argument
314 if (name == 0 || table == 0) in __nis_insert_name_mt()
328 if (! __nis_insert_item_mt(item, table, 0)) { in __nis_insert_name_mt()
345 __nis_find_item_mt(nis_name name, __nis_hash_table_mt *table, int readwrite, in __nis_find_item_mt() argument
351 if (name == 0 || __nis_lock_hash_table(table, 0, "nfimt") == 0) in __nis_find_item_mt()
367 while ((item = *__find_item_mt(name, table, 0)) != 0) { in __nis_find_item_mt()
377 (void) __nis_ulock_hash_table(table, 0, "nfimt"); in __nis_find_item_mt()
380 (void) pthread_cond_wait(&item->lock, &table->lock); in __nis_find_item_mt()
387 table->locked_items++; in __nis_find_item_mt()
392 table->locked_items++; in __nis_find_item_mt()
399 (void) __nis_ulock_hash_table(table, 0, "nfimt"); in __nis_find_item_mt()
405 __nis_pop_item_mt(__nis_hash_table_mt *table) { in __nis_pop_item_mt() argument
410 if (__nis_lock_hash_table(table, 0, "npimt") == 0) in __nis_pop_item_mt()
415 while ((item = table->first) != 0) { in __nis_pop_item_mt()
416 if (table->destroyItem != 0) in __nis_pop_item_mt()
422 (void) pthread_cond_wait(&item->lock, &table->lock); in __nis_pop_item_mt()
427 __nis_ulock_hash_table(table, 0, "npimt"); in __nis_pop_item_mt()
432 for (cur = table->keys[item->keychain]; cur; in __nis_pop_item_mt()
438 table->keys[cur->keychain] = cur->next; in __nis_pop_item_mt()
442 table->first = cur->nxt_item; in __nis_pop_item_mt()
456 if (table->locked_items != 0 && in __nis_pop_item_mt()
458 table->locked_items--; in __nis_pop_item_mt()
459 if (table->locked_items == 0) { in __nis_pop_item_mt()
461 (void) pthread_cond_signal(&table->cond); in __nis_pop_item_mt()
477 table->destroyItem != 0) { in __nis_pop_item_mt()
478 (*table->destroyItem)(item); in __nis_pop_item_mt()
486 (void) __nis_ulock_hash_table(table, 0, "npimt"); in __nis_pop_item_mt()
494 return ((item != 0) ? item : __nis_pop_item_mt(table)); in __nis_pop_item_mt()
498 __nis_remove_item_mt(nis_name name, __nis_hash_table_mt *table) { in __nis_remove_item_mt() argument
503 if (__nis_lock_hash_table(table, 0, "nrimt") == 0) in __nis_remove_item_mt()
508 while ((nl = *(pp = __find_item_mt(name, table, (int *)0))) != 0) { in __nis_remove_item_mt()
509 if (table->destroyItem != 0) in __nis_remove_item_mt()
515 (void) pthread_cond_wait(&nl->lock, &table->lock); in __nis_remove_item_mt()
519 (void) __nis_ulock_hash_table(table, 0, "nrimt"); in __nis_remove_item_mt()
531 table->first = nl->nxt_item; in __nis_remove_item_mt()
545 if (table->locked_items != 0 && in __nis_remove_item_mt()
547 table->locked_items--; in __nis_remove_item_mt()
548 if (table->locked_items == 0) { in __nis_remove_item_mt()
550 (void) pthread_cond_signal(&table->cond); in __nis_remove_item_mt()
562 if (nl->readers == 0 && nl->writer == 0 && table->destroyItem != 0) { in __nis_remove_item_mt()
563 (*table->destroyItem)(nl); in __nis_remove_item_mt()
567 (void) __nis_ulock_hash_table(table, 0, "nrimt"); in __nis_remove_item_mt()
579 __nis_release_item(void *arg, __nis_hash_table_mt *table, int readwrite) { in __nis_release_item() argument
584 if (item == 0 || __nis_lock_hash_table(table, 0, "nreli") == 0) in __nis_release_item()
592 (void) __nis_ulock_hash_table(table, 0, "nreli"); in __nis_release_item()
599 if (table->locked_items != 0) in __nis_release_item()
600 table->locked_items--; in __nis_release_item()
607 if (table->locked_items != 0) in __nis_release_item()
608 table->locked_items--; in __nis_release_item()
613 if (table->locked_items == 0) { in __nis_release_item()
615 (void) pthread_cond_signal(&table->cond); in __nis_release_item()
630 table->destroyItem != 0) in __nis_release_item()
631 (*table->destroyItem)(item); in __nis_release_item()
633 (void) __nis_ulock_hash_table(table, 0, "nreli"); in __nis_release_item()
672 __nis_hash_table_mt *table, in __nis_scan_table_mt() argument
678 if (table == 0) { in __nis_scan_table_mt()
682 if (__nis_lock_hash_table(table, 1, "nstmt") == 0) { in __nis_scan_table_mt()
688 slot < sizeof (table->keys) / sizeof (table->keys[0]); in __nis_scan_table_mt()
692 for (it = table->keys[slot]; it != 0; it = it->next) { in __nis_scan_table_mt()
698 if (__nis_ulock_hash_table(table, 1, "nstmt") == 0) in __nis_scan_table_mt()