6811333 Remove prom_printf() message in emlxs driver
[opensolaris.git] / usr / src / lib / libnisdb / nis_hashitem.h
blob5805f7e274ea2210a9b91884d7ba15c631ce86a0
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _NIS_HASHITEM_H
28 #define _NIS_HASHITEM_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
32 #include <pthread.h>
33 #include <rpcsvc/nis.h>
35 #include "nisdb_rw.h"
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
41 /* Private versions of the various NIS_HASH_ITEM functions */
42 typedef struct __nis_item_item {
43 pthread_cond_t lock;
44 nis_name name;
45 int keychain;
46 uint32_t readers;
47 pthread_t last_reader_id;
48 uint32_t writer;
49 pthread_t writer_id;
50 struct __nis_item_item *next;
51 struct __nis_item_item *prv_item;
52 struct __nis_item_item *nxt_item;
53 } __nis_hash_item_mt;
55 typedef struct {
56 pthread_mutex_t lock;
57 pthread_cond_t cond;
58 pthread_mutex_t traverser_id_lock;
60 * Protects 'traversed'
61 * and 'traverser_id'.
63 uint32_t traversed;
64 pthread_t traverser_id;
65 uint32_t locked_items;
66 __nis_hash_item_mt *keys[64];
67 __nis_hash_item_mt *first;
68 void (*destroyItem)(void *);
69 } __nis_hash_table_mt;
71 #define NIS_HASH_TABLE_MT_INIT { \
72 PTHREAD_MUTEX_INITIALIZER, \
73 {0}, \
74 PTHREAD_MUTEX_INITIALIZER \
75 /* Zero is fine for the rest */ \
78 #define LOCK_LIST(list, msg) (void) __nis_lock_hash_table(list, 1, msg)
79 #define ULOCK_LIST(list, msg) (void) __nis_ulock_hash_table(list, 1, msg)
82 extern void __nis_init_hash_table(__nis_hash_table_mt *, void (*)(void *));
83 extern int __nis_lock_hash_table(__nis_hash_table_mt *, int, char *);
84 extern int __nis_ulock_hash_table(__nis_hash_table_mt *, int, char *);
85 extern int __nis_insert_item_mt(void *, __nis_hash_table_mt *, int);
86 extern void __nis_insert_name_mt(nis_name, __nis_hash_table_mt *);
87 extern void *__nis_find_item_mt(nis_name, __nis_hash_table_mt *, int,
88 int *);
89 extern void *__nis_pop_item_mt(__nis_hash_table_mt *);
90 extern void *__nis_remove_item_mt(nis_name, __nis_hash_table_mt *);
91 extern int __nis_release_item(void *, __nis_hash_table_mt *, int);
92 extern int __nis_item_access(void *);
93 extern void __nis_scan_table_mt(__nis_hash_table_mt *,
94 bool_t (*)(__nis_hash_item_mt *, void *), void *);
96 /* Define-magic */
97 #define NIS_HASH_ITEM __nis_hash_item_mt
98 #define NIS_HASH_TABLE __nis_hash_table_mt
99 #define nis_insert_item(i, t) __nis_insert_item_mt(i, t, -1)
100 #define nis_insert_item_rw(i, t, rw) __nis_insert_item_mt(i, t, rw)
101 #define nis_insert_name(n, t) __nis_insert_name_mt(n, t)
102 #define nis_find_item(i, t) __nis_find_item_mt(i, t, -1, 0)
103 #define nis_find_item_rw(i, t, rw) __nis_find_item_mt(i, t, rw, 0)
104 #define nis_pop_item __nis_pop_item_mt
105 #define nis_remove_item __nis_remove_item_mt
106 #define nis_scan_table __nis_scan_table_mt
108 #define MT_LOCK_TYPE(type) (type < 0)?"W":(type > 0)?"R":"N"
110 #ifdef NIS_MT_DEBUG
111 #define MT_LOG(condition, syslogarg) if (condition) syslog ## syslogarg
112 #else
113 #define MT_LOG(condition, syslogarg)
114 #endif /* NIS_MT_DEBUG */
116 #ifdef __cplusplus
118 #endif /* __cplusplus */
120 #endif /* _NIS_HASHITEM_H */