51#define LF_DYNARRAY_LEVEL_LENGTH 256
52#define LF_DYNARRAY_LEVELS 4
71#define LF_PINBOX_PINS 4
72#define LF_PURGATORY_SIZE 10
92#if SIZEOF_INT * 2 + SIZEOF_CHARP * (LF_PINBOX_PINS + 2) != 64
102#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG)
103#define LF_REQUIRE_PINS(N) \
104 static const char require_pins[LF_PINBOX_PINS - N] [[maybe_unused]]; \
105 static const int LF_NUM_PINS_IN_THIS_FILE = N;
107#define LF_REQUIRE_PINS(N)
111#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG)
112 assert(pin < LF_NUM_PINS_IN_THIS_FILE);
114 pins->
pin[pin].store(addr);
118#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG)
119 assert(pin < LF_NUM_PINS_IN_THIS_FILE);
121 pins->
pin[pin].store(
nullptr);
145#define lf_alloc_init(A, B, C) lf_alloc_init2(A, B, C, NULL, NULL)
164 const uchar *key2,
size_t key2_length);
167#define LF_HASH_UNIQUE 1
168#define MY_LF_ERRPTR ((void *)(intptr)1)
211#define lf_hash_init(A, B, C, D, E, F, G) \
212 lf_hash_init2(A, B, C, D, E, F, G, NULL, NULL, NULL, NULL)
215 uint key_offset, uint key_length,
static mysql_service_status_t init()
Component initialization.
Definition: audit_api_message_emit.cc:570
static int flags[50]
Definition: hp_test1.cc:39
static uint16 key1[1001]
Definition: hp_test2.cc:49
void lf_hash_init_func(uchar *dst, const uchar *src)
Definition: lf.h:165
void lf_allocator_func(uchar *)
Definition: lf.h:134
uint lf_hash_func(const LF_HASH *, const uchar *, size_t)
Definition: lf.h:162
static void lf_unpin(LF_PINS *pins, int pin)
Definition: lf.h:117
static void lf_alloc_direct_free(LF_ALLOCATOR *allocator, void *addr)
Definition: lf.h:151
static void lf_pin(LF_PINS *pins, int pin, void *addr)
Definition: lf.h:110
void lf_alloc_destroy(LF_ALLOCATOR *allocator)
Definition: lf_alloc-pin.cc:418
int lf_dynarray_iterate(LF_DYNARRAY *array, lf_dynarray_func func, void *arg)
Definition: lf_dynarray.cc:226
#define LF_PINBOX_PINS
Definition: lf.h:71
void lf_pinbox_put_pins(LF_PINS *pins)
Definition: lf_alloc-pin.cc:218
void lf_pinbox_free_func(void *, void *, void *)
Definition: lf.h:74
void lf_pinbox_destroy(LF_PINBOX *pinbox)
Definition: lf_alloc-pin.cc:151
LF_PINS * lf_pinbox_get_pins(LF_PINBOX *pinbox)
Definition: lf_alloc-pin.cc:165
void * lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
Find hash element corresponding to the key.
Definition: lf_hash.cc:684
const uchar *(* hash_get_key_function)(const uchar *arg, size_t *length)
Callback for extracting key and key length from user data in a LF_HASH.
Definition: lf.h:184
int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
Definition: lf_hash.cc:630
void lf_pinbox_free(LF_PINS *pins, void *addr)
Definition: lf_alloc-pin.cc:272
static void lf_hash_search_unpin(LF_PINS *pins)
Definition: lf.h:237
void lf_hash_init3(LF_HASH *hash, uint element_size, uint flags, hash_get_key_function get_key, lf_hash_func *hash_function, lf_cmp_func *cmp_function, lf_allocator_func *ctor, lf_allocator_func *dtor, lf_hash_init_func *init)
Definition: lf_hash.cc:533
void lf_alloc_init2(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset, lf_allocator_func *ctor, lf_allocator_func *dtor)
Initialize lock-free allocator.
Definition: lf_alloc-pin.cc:396
void lf_hash_destroy(LF_HASH *hash)
Definition: lf_hash.cc:541
int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data)
Definition: lf_hash.cc:576
static LF_PINS * lf_hash_get_pins(LF_HASH *hash)
Definition: lf.h:231
void lf_dynarray_destroy(LF_DYNARRAY *array)
Definition: lf_dynarray.cc:85
int lf_cmp_func(const uchar *key1, size_t key1_length, const uchar *key2, size_t key2_length)
Definition: lf.h:163
void lf_hash_init2(LF_HASH *hash, uint element_size, uint flags, uint key_offset, uint key_length, hash_get_key_function get_key, CHARSET_INFO *charset, lf_hash_func *hash_function, lf_allocator_func *ctor, lf_allocator_func *dtor, lf_hash_init_func *init)
Definition: lf_hash.cc:524
void * lf_dynarray_value(LF_DYNARRAY *array, uint idx)
Definition: lf_dynarray.cc:174
#define LF_DYNARRAY_LEVELS
Definition: lf.h:52
static void lf_hash_put_pins(LF_PINS *pins)
Definition: lf.h:235
int(* lf_dynarray_func)(void *, void *)
Definition: lf.h:59
void * lf_alloc_new(LF_PINS *pins)
Definition: lf_alloc-pin.cc:439
uint lf_alloc_pool_count(LF_ALLOCATOR *allocator)
Definition: lf_alloc-pin.cc:475
void lf_dynarray_init(LF_DYNARRAY *array, uint element_size)
Definition: lf_dynarray.cc:64
void lf_pinbox_init(LF_PINBOX *pinbox, uint free_ptr_offset, lf_pinbox_free_func *free_func, void *free_func_arg)
Definition: lf_alloc-pin.cc:139
MYSQL_PLUGIN_IMPORT const int LF_HASH_OVERHEAD
Definition: lf_hash.cc:70
void * lf_dynarray_lvalue(LF_DYNARRAY *array, uint idx)
Definition: lf_dynarray.cc:114
void * lf_hash_random_match(LF_HASH *hash, LF_PINS *pins, lf_hash_match_func *match, uint rand_val, void *match_arg)
Find random hash element which satisfies condition specified by match function.
Definition: lf_hash.cc:736
int lf_hash_match_func(const uchar *el, void *arg)
Definition: lf.h:239
Some integer typedefs for easier portability.
unsigned char uchar
Definition: my_inttypes.h:51
uint32_t uint32
Definition: my_inttypes.h:66
void my_free(void *ptr)
Frees the memory pointed by the ptr.
Definition: my_memory.cc:80
#define MYSQL_PLUGIN_IMPORT
Definition: my_sharedlib.h:70
Instrumentation helpers for statements.
const std::string charset("charset")
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:75
required string key
Definition: replication_asynchronous_connection_failover.proto:59
Our own string classes, used pervasively throughout the executor.
Definition: m_ctype.h:422
lf_allocator_func * destructor
Definition: lf.h:142
uint element_size
Definition: lf.h:139
std::atomic< uint32 > mallocs
Definition: lf.h:140
lf_allocator_func * constructor
Definition: lf.h:141
LF_PINBOX pinbox
Definition: lf.h:137
std::atomic< uchar * > top
Definition: lf.h:138
uint size_of_element
Definition: lf.h:56
std::atomic< void * > level[LF_DYNARRAY_LEVELS]
Definition: lf.h:55
CHARSET_INFO * charset
Definition: lf.h:190
uint element_size
Definition: lf.h:194
std::atomic< int32 > size
Definition: lf.h:196
hash_get_key_function get_key
Definition: lf.h:189
lf_hash_init_func * initialize
"Initialize" hook - called to finish initialization of object provided by LF_ALLOCATOR (which is poin...
Definition: lf.h:208
lf_hash_func * hash_function
Definition: lf.h:191
uint key_length
Definition: lf.h:193
LF_DYNARRAY array
Definition: lf.h:187
uint key_offset
Definition: lf.h:193
uint flags
Definition: lf.h:195
std::atomic< int32 > count
Definition: lf.h:197
LF_ALLOCATOR alloc
Definition: lf.h:188
lf_cmp_func * cmp_function
Definition: lf.h:192
lf_pinbox_free_func * free_func
Definition: lf.h:78
LF_DYNARRAY pinarray
Definition: lf.h:77
void * free_func_arg
Definition: lf.h:79
uint free_ptr_offset
Definition: lf.h:80
std::atomic< uint32 > pins_in_array
Definition: lf.h:82
std::atomic< uint32 > pinstack_top_ver
Definition: lf.h:81
char pad[64 - sizeof(uint32) *2 - sizeof(void *) *(LF_PINBOX_PINS+2)]
Definition: lf.h:93
uint32 purgatory_count
Definition: lf.h:89
LF_PINBOX * pinbox
Definition: lf.h:87
std::atomic< void * > pin[LF_PINBOX_PINS]
Definition: lf.h:86
void * purgatory
Definition: lf.h:88
std::atomic< uint32 > link
Definition: lf.h:90