52#define LF_DYNARRAY_LEVEL_LENGTH 256
53#define LF_DYNARRAY_LEVELS 4
72#define LF_PINBOX_PINS 4
73#define LF_PURGATORY_SIZE 10
93#if SIZEOF_INT * 2 + SIZEOF_CHARP * (LF_PINBOX_PINS + 2) != 64
103#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG)
104#define LF_REQUIRE_PINS(N) \
105 static const char require_pins[LF_PINBOX_PINS - N] [[maybe_unused]]; \
106 static const int LF_NUM_PINS_IN_THIS_FILE = N;
108#define LF_REQUIRE_PINS(N)
112#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG)
113 assert(pin < LF_NUM_PINS_IN_THIS_FILE);
115 pins->
pin[pin].store(addr);
119#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG)
120 assert(pin < LF_NUM_PINS_IN_THIS_FILE);
122 pins->
pin[pin].store(
nullptr);
146#define lf_alloc_init(A, B, C) lf_alloc_init2(A, B, C, NULL, NULL)
165 const uchar *key2,
size_t key2_length);
168#define LF_HASH_UNIQUE 1
169#define MY_LF_ERRPTR ((void *)(intptr)1)
212#define lf_hash_init(A, B, C, D, E, F, G) \
213 lf_hash_init2(A, B, C, D, E, F, G, NULL, NULL, NULL, NULL)
216 uint key_offset, uint key_length,
static mysql_service_status_t init()
Component initialization.
Definition: audit_api_message_emit.cc:571
static int flags[50]
Definition: hp_test1.cc:40
static uint16 key1[1001]
Definition: hp_test2.cc:50
void lf_hash_init_func(uchar *dst, const uchar *src)
Definition: lf.h:166
void lf_allocator_func(uchar *)
Definition: lf.h:135
uint lf_hash_func(const LF_HASH *, const uchar *, size_t)
Definition: lf.h:163
static void lf_unpin(LF_PINS *pins, int pin)
Definition: lf.h:118
static void lf_alloc_direct_free(LF_ALLOCATOR *allocator, void *addr)
Definition: lf.h:152
static void lf_pin(LF_PINS *pins, int pin, void *addr)
Definition: lf.h:111
void lf_alloc_destroy(LF_ALLOCATOR *allocator)
Definition: lf_alloc-pin.cc:419
int lf_dynarray_iterate(LF_DYNARRAY *array, lf_dynarray_func func, void *arg)
Definition: lf_dynarray.cc:227
#define LF_PINBOX_PINS
Definition: lf.h:72
void lf_pinbox_put_pins(LF_PINS *pins)
Definition: lf_alloc-pin.cc:219
void lf_pinbox_free_func(void *, void *, void *)
Definition: lf.h:75
void lf_pinbox_destroy(LF_PINBOX *pinbox)
Definition: lf_alloc-pin.cc:152
LF_PINS * lf_pinbox_get_pins(LF_PINBOX *pinbox)
Definition: lf_alloc-pin.cc:166
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:723
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:185
int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
Definition: lf_hash.cc:670
void lf_pinbox_free(LF_PINS *pins, void *addr)
Definition: lf_alloc-pin.cc:273
static void lf_hash_search_unpin(LF_PINS *pins)
Definition: lf.h:238
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:573
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:397
void lf_hash_destroy(LF_HASH *hash)
Definition: lf_hash.cc:581
int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data)
Definition: lf_hash.cc:616
static LF_PINS * lf_hash_get_pins(LF_HASH *hash)
Definition: lf.h:232
void lf_dynarray_destroy(LF_DYNARRAY *array)
Definition: lf_dynarray.cc:86
int lf_cmp_func(const uchar *key1, size_t key1_length, const uchar *key2, size_t key2_length)
Definition: lf.h:164
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:564
void * lf_dynarray_value(LF_DYNARRAY *array, uint idx)
Definition: lf_dynarray.cc:175
#define LF_DYNARRAY_LEVELS
Definition: lf.h:53
static void lf_hash_put_pins(LF_PINS *pins)
Definition: lf.h:236
int(* lf_dynarray_func)(void *, void *)
Definition: lf.h:60
void * lf_alloc_new(LF_PINS *pins)
Definition: lf_alloc-pin.cc:440
uint lf_alloc_pool_count(LF_ALLOCATOR *allocator)
Definition: lf_alloc-pin.cc:476
void lf_dynarray_init(LF_DYNARRAY *array, uint element_size)
Definition: lf_dynarray.cc:65
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:140
MYSQL_PLUGIN_IMPORT const int LF_HASH_OVERHEAD
Definition: lf_hash.cc:72
void * lf_dynarray_lvalue(LF_DYNARRAY *array, uint idx)
Definition: lf_dynarray.cc:115
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:775
int lf_hash_match_func(const uchar *el, void *arg)
Definition: lf.h:240
Some integer typedefs for easier portability.
unsigned char uchar
Definition: my_inttypes.h:52
uint32_t uint32
Definition: my_inttypes.h:67
void my_free(void *ptr)
Frees the memory pointed by the ptr.
Definition: my_memory.cc:81
#define MYSQL_PLUGIN_IMPORT
Definition: my_sharedlib.h:71
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:76
size_t size(const char *const c)
Definition: base64.h:46
required string key
Definition: replication_asynchronous_connection_failover.proto:60
Our own string classes, used pervasively throughout the executor.
Definition: m_ctype.h:421
lf_allocator_func * destructor
Definition: lf.h:143
uint element_size
Definition: lf.h:140
std::atomic< uint32 > mallocs
Definition: lf.h:141
lf_allocator_func * constructor
Definition: lf.h:142
LF_PINBOX pinbox
Definition: lf.h:138
std::atomic< uchar * > top
Definition: lf.h:139
uint size_of_element
Definition: lf.h:57
std::atomic< void * > level[LF_DYNARRAY_LEVELS]
Definition: lf.h:56
CHARSET_INFO * charset
Definition: lf.h:191
uint element_size
Definition: lf.h:195
std::atomic< int32 > size
Definition: lf.h:197
hash_get_key_function get_key
Definition: lf.h:190
lf_hash_init_func * initialize
"Initialize" hook - called to finish initialization of object provided by LF_ALLOCATOR (which is poin...
Definition: lf.h:209
lf_hash_func * hash_function
Definition: lf.h:192
uint key_length
Definition: lf.h:194
LF_DYNARRAY array
Definition: lf.h:188
uint key_offset
Definition: lf.h:194
uint flags
Definition: lf.h:196
std::atomic< int32 > count
Definition: lf.h:198
LF_ALLOCATOR alloc
Definition: lf.h:189
lf_cmp_func * cmp_function
Definition: lf.h:193
lf_pinbox_free_func * free_func
Definition: lf.h:79
LF_DYNARRAY pinarray
Definition: lf.h:78
void * free_func_arg
Definition: lf.h:80
uint free_ptr_offset
Definition: lf.h:81
std::atomic< uint32 > pins_in_array
Definition: lf.h:83
std::atomic< uint32 > pinstack_top_ver
Definition: lf.h:82
char pad[64 - sizeof(uint32) *2 - sizeof(void *) *(LF_PINBOX_PINS+2)]
Definition: lf.h:94
uint32 purgatory_count
Definition: lf.h:90
LF_PINBOX * pinbox
Definition: lf.h:88
std::atomic< void * > pin[LF_PINBOX_PINS]
Definition: lf.h:87
void * purgatory
Definition: lf.h:89
std::atomic< uint32 > link
Definition: lf.h:91