Lines Matching refs:lh

43 static int expand(OPENSSL_LHASH *lh);
44 static void contract(OPENSSL_LHASH *lh);
45 static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh, const void *data, unsigned long *rhash);
76 void OPENSSL_LH_free(OPENSSL_LHASH *lh) in OPENSSL_LH_free() argument
78 if (lh == NULL) in OPENSSL_LH_free()
81 OPENSSL_LH_flush(lh); in OPENSSL_LH_free()
82 OPENSSL_free(lh->b); in OPENSSL_LH_free()
83 OPENSSL_free(lh); in OPENSSL_LH_free()
86 void OPENSSL_LH_flush(OPENSSL_LHASH *lh) in OPENSSL_LH_flush() argument
91 if (lh == NULL) in OPENSSL_LH_flush()
94 for (i = 0; i < lh->num_nodes; i++) { in OPENSSL_LH_flush()
95 n = lh->b[i]; in OPENSSL_LH_flush()
101 lh->b[i] = NULL; in OPENSSL_LH_flush()
105 void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data) in OPENSSL_LH_insert() argument
111 lh->error = 0; in OPENSSL_LH_insert()
112 if ((lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) && !expand(lh)) in OPENSSL_LH_insert()
115 rn = getrn(lh, data, &hash); in OPENSSL_LH_insert()
119 lh->error++; in OPENSSL_LH_insert()
127 lh->num_insert++; in OPENSSL_LH_insert()
128 lh->num_items++; in OPENSSL_LH_insert()
132 lh->num_replace++; in OPENSSL_LH_insert()
137 void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data) in OPENSSL_LH_delete() argument
143 lh->error = 0; in OPENSSL_LH_delete()
144 rn = getrn(lh, data, &hash); in OPENSSL_LH_delete()
147 lh->num_no_delete++; in OPENSSL_LH_delete()
154 lh->num_delete++; in OPENSSL_LH_delete()
157 lh->num_items--; in OPENSSL_LH_delete()
158 if ((lh->num_nodes > MIN_NODES) && in OPENSSL_LH_delete()
159 (lh->down_load >= (lh->num_items * LH_LOAD_MULT / lh->num_nodes))) in OPENSSL_LH_delete()
160 contract(lh); in OPENSSL_LH_delete()
165 void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data) in OPENSSL_LH_retrieve() argument
171 tsan_store((TSAN_QUALIFIER int *)&lh->error, 0); in OPENSSL_LH_retrieve()
173 rn = getrn(lh, data, &hash); in OPENSSL_LH_retrieve()
176 tsan_counter(&lh->num_retrieve_miss); in OPENSSL_LH_retrieve()
180 tsan_counter(&lh->num_retrieve); in OPENSSL_LH_retrieve()
186 static void doall_util_fn(OPENSSL_LHASH *lh, int use_arg, in doall_util_fn() argument
193 if (lh == NULL) in doall_util_fn()
200 for (i = lh->num_nodes - 1; i >= 0; i--) { in doall_util_fn()
201 a = lh->b[i]; in doall_util_fn()
213 void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func) in OPENSSL_LH_doall() argument
215 doall_util_fn(lh, 0, func, (OPENSSL_LH_DOALL_FUNCARG)0, NULL); in OPENSSL_LH_doall()
218 void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg) in OPENSSL_LH_doall_arg() argument
220 doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC)0, func, arg); in OPENSSL_LH_doall_arg()
223 static int expand(OPENSSL_LHASH *lh) in expand() argument
229 nni = lh->num_alloc_nodes; in expand()
230 p = lh->p; in expand()
231 pmax = lh->pmax; in expand()
234 n = OPENSSL_realloc(lh->b, sizeof(OPENSSL_LH_NODE *) * j); in expand()
236 lh->error++; in expand()
239 lh->b = n; in expand()
241 lh->pmax = nni; in expand()
242 lh->num_alloc_nodes = j; in expand()
243 lh->num_expand_reallocs++; in expand()
244 lh->p = 0; in expand()
246 lh->p++; in expand()
249 lh->num_nodes++; in expand()
250 lh->num_expands++; in expand()
251 n1 = &(lh->b[p]); in expand()
252 n2 = &(lh->b[p + pmax]); in expand()
269 static void contract(OPENSSL_LHASH *lh) in contract() argument
273 np = lh->b[lh->p + lh->pmax - 1]; in contract()
274 lh->b[lh->p + lh->pmax - 1] = NULL; /* 24/07-92 - eay - weird but :-( */ in contract()
275 if (lh->p == 0) { in contract()
276 n = OPENSSL_realloc(lh->b, in contract()
277 (unsigned int)(sizeof(OPENSSL_LH_NODE *) * lh->pmax)); in contract()
280 lh->error++; in contract()
283 lh->num_contract_reallocs++; in contract()
284 lh->num_alloc_nodes /= 2; in contract()
285 lh->pmax /= 2; in contract()
286 lh->p = lh->pmax - 1; in contract()
287 lh->b = n; in contract()
289 lh->p--; in contract()
291 lh->num_nodes--; in contract()
292 lh->num_contracts++; in contract()
294 n1 = lh->b[(int)lh->p]; in contract()
296 lh->b[(int)lh->p] = np; in contract()
304 static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh, in getrn() argument
311 hash = (*(lh->hash)) (data); in getrn()
312 tsan_counter(&lh->num_hash_calls); in getrn()
315 nn = hash % lh->pmax; in getrn()
316 if (nn < lh->p) in getrn()
317 nn = hash % lh->num_alloc_nodes; in getrn()
319 cf = lh->comp; in getrn()
320 ret = &(lh->b[(int)nn]); in getrn()
322 tsan_counter(&lh->num_hash_comps); in getrn()
327 tsan_counter(&lh->num_comp_calls); in getrn()
384 unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh) in OPENSSL_LH_num_items() argument
386 return lh ? lh->num_items : 0; in OPENSSL_LH_num_items()
389 unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh) in OPENSSL_LH_get_down_load() argument
391 return lh->down_load; in OPENSSL_LH_get_down_load()
394 void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load) in OPENSSL_LH_set_down_load() argument
396 lh->down_load = down_load; in OPENSSL_LH_set_down_load()
399 int OPENSSL_LH_error(OPENSSL_LHASH *lh) in OPENSSL_LH_error() argument
401 return lh->error; in OPENSSL_LH_error()