mirror of
https://github.com/openssl/openssl.git
synced 2025-02-17 14:32:04 +08:00
lhash/lhash.c: switch to Thread-Sanitizer-friendly primitives.
Reviewed-by: Paul Dale <paul.dale@oracle.com> Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/6786)
This commit is contained in:
parent
ede3e6653c
commit
cab76c0f64
@ -157,16 +157,18 @@ void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data)
|
||||
OPENSSL_LH_NODE **rn;
|
||||
void *ret;
|
||||
|
||||
lh->error = 0;
|
||||
tsan_store((TSAN_QUALIFIER int *)&lh->error, 0);
|
||||
|
||||
rn = getrn(lh, data, &hash);
|
||||
|
||||
if (*rn == NULL) {
|
||||
lh->num_retrieve_miss++;
|
||||
tsan_counter(&lh->num_retrieve_miss);
|
||||
return NULL;
|
||||
} else {
|
||||
ret = (*rn)->data;
|
||||
lh->num_retrieve++;
|
||||
tsan_counter(&lh->num_retrieve);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -296,7 +298,7 @@ static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh,
|
||||
OPENSSL_LH_COMPFUNC cf;
|
||||
|
||||
hash = (*(lh->hash)) (data);
|
||||
lh->num_hash_calls++;
|
||||
tsan_counter(&lh->num_hash_calls);
|
||||
*rhash = hash;
|
||||
|
||||
nn = hash % lh->pmax;
|
||||
@ -306,12 +308,12 @@ static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh,
|
||||
cf = lh->comp;
|
||||
ret = &(lh->b[(int)nn]);
|
||||
for (n1 = *ret; n1 != NULL; n1 = n1->next) {
|
||||
lh->num_hash_comps++;
|
||||
tsan_counter(&lh->num_hash_comps);
|
||||
if (n1->hash != hash) {
|
||||
ret = &(n1->next);
|
||||
continue;
|
||||
}
|
||||
lh->num_comp_calls++;
|
||||
tsan_counter(&lh->num_comp_calls);
|
||||
if (cf(n1->data, data) == 0)
|
||||
break;
|
||||
ret = &(n1->next);
|
||||
|
@ -8,6 +8,8 @@
|
||||
*/
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
#include "internal/tsan_assist.h"
|
||||
|
||||
struct lhash_node_st {
|
||||
void *data;
|
||||
struct lhash_node_st *next;
|
||||
@ -29,14 +31,14 @@ struct lhash_st {
|
||||
unsigned long num_expand_reallocs;
|
||||
unsigned long num_contracts;
|
||||
unsigned long num_contract_reallocs;
|
||||
unsigned long num_hash_calls;
|
||||
unsigned long num_comp_calls;
|
||||
TSAN_QUALIFIER unsigned long num_hash_calls;
|
||||
TSAN_QUALIFIER unsigned long num_comp_calls;
|
||||
unsigned long num_insert;
|
||||
unsigned long num_replace;
|
||||
unsigned long num_delete;
|
||||
unsigned long num_no_delete;
|
||||
unsigned long num_retrieve;
|
||||
unsigned long num_retrieve_miss;
|
||||
unsigned long num_hash_comps;
|
||||
TSAN_QUALIFIER unsigned long num_retrieve;
|
||||
TSAN_QUALIFIER unsigned long num_retrieve_miss;
|
||||
TSAN_QUALIFIER unsigned long num_hash_comps;
|
||||
int error;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user