mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
MDEV-8715 - Obsolete sql_alloc() in favor of THD::alloc() and thd_alloc()
The following left in semi-improved state to keep patch size reasonable: - Field operator new: left thd_alloc(current_thd) - Sql_alloc operator new: left thd_alloc(thd_get_current_thd()) - Item_args constructors: left thd_alloc(thd) - Item_func_interval::fix_length_and_dec(): no THD arg, have to call current_thd - Item_func_dyncol_exists::val_int(): same - Item_dyncol_get::val_str(): same - Item_dyncol_get::val_int(): same - Item_dyncol_get::val_real(): same - Item_dyncol_get::val_decimal(): same - Item_singlerow_subselect::fix_length_and_dec(): same
This commit is contained in:
parent
753d1f868c
commit
54689e1d5c
40 changed files with 113 additions and 160 deletions
|
@ -2443,9 +2443,6 @@ end:
|
|||
return retval;
|
||||
}
|
||||
|
||||
/* Used in sql_alloc(). Inited and freed in main() */
|
||||
MEM_ROOT s_mem_root;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
char **defaults_argv;
|
||||
|
@ -2458,7 +2455,6 @@ int main(int argc, char** argv)
|
|||
my_init_time(); // for time functions
|
||||
tzset(); // set tzname
|
||||
|
||||
init_alloc_root(&s_mem_root, 16384, 0, MYF(0));
|
||||
if (load_defaults("my", load_groups, &argc, &argv))
|
||||
exit(1);
|
||||
|
||||
|
@ -2569,7 +2565,6 @@ int main(int argc, char** argv)
|
|||
my_fclose(result_file, MYF(0));
|
||||
cleanup();
|
||||
free_annotate_event();
|
||||
free_root(&s_mem_root, MYF(0));
|
||||
free_defaults(defaults_argv);
|
||||
my_free_open_file_info();
|
||||
load_processor.destroy();
|
||||
|
@ -2582,11 +2577,6 @@ int main(int argc, char** argv)
|
|||
}
|
||||
|
||||
|
||||
void *sql_alloc(size_t size)
|
||||
{
|
||||
return alloc_root(&s_mem_root, size);
|
||||
}
|
||||
|
||||
struct encryption_service_st encryption_handler=
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0
|
||||
|
|
|
@ -610,7 +610,7 @@ public:
|
|||
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
|
||||
{ return alloc_root(mem_root, size); }
|
||||
static void *operator new(size_t size) throw ()
|
||||
{ return sql_alloc(size); }
|
||||
{ return thd_alloc(current_thd, size); }
|
||||
static void operator delete(void *ptr_arg, size_t size) { TRASH(ptr_arg, size); }
|
||||
static void operator delete(void *ptr, MEM_ROOT *mem_root)
|
||||
{ DBUG_ASSERT(0); }
|
||||
|
|
|
@ -1281,8 +1281,8 @@ static bool print_admin_msg(THD* thd, uint len,
|
|||
length=(uint) (strxmov(name, db_name, ".", table_name.c_ptr_safe(), NullS) - name);
|
||||
/*
|
||||
TODO: switch from protocol to push_warning here. The main reason we didn't
|
||||
it yet is parallel repair. Due to following trace:
|
||||
mi_check_print_msg/push_warning/sql_alloc/my_pthread_getspecific_ptr.
|
||||
it yet is parallel repair, which threads have no THD object accessible via
|
||||
current_thd.
|
||||
|
||||
Also we likely need to lock mutex here (in both cases with protocol and
|
||||
push_warning).
|
||||
|
@ -9058,7 +9058,7 @@ int ha_partition::check_for_upgrade(HA_CHECK_OPT *check_opt)
|
|||
}
|
||||
m_part_info->key_algorithm= partition_info::KEY_ALGORITHM_51;
|
||||
if (skip_generation ||
|
||||
!(part_buf= generate_partition_syntax(m_part_info,
|
||||
!(part_buf= generate_partition_syntax(thd, m_part_info,
|
||||
&part_buf_len,
|
||||
true,
|
||||
true,
|
||||
|
|
|
@ -1018,7 +1018,7 @@ void Item::set_name(THD *thd, const char *str, uint length, CHARSET_INFO *cs)
|
|||
if (!my_charset_same(cs, system_charset_info))
|
||||
{
|
||||
size_t res_length;
|
||||
name= sql_strmake_with_convert(str, length, cs,
|
||||
name= sql_strmake_with_convert(thd, str, length, cs,
|
||||
MAX_ALIAS_NAME, system_charset_info,
|
||||
&res_length);
|
||||
name_length= res_length;
|
||||
|
@ -1034,7 +1034,7 @@ void Item::set_name_no_truncate(THD *thd, const char *str, uint length,
|
|||
if (!my_charset_same(cs, system_charset_info))
|
||||
{
|
||||
size_t res_length;
|
||||
name= sql_strmake_with_convert(str, length, cs,
|
||||
name= sql_strmake_with_convert(thd, str, length, cs,
|
||||
UINT_MAX, system_charset_info,
|
||||
&res_length);
|
||||
name_length= res_length;
|
||||
|
@ -8483,7 +8483,7 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
|
|||
|
||||
Item *new_item= NULL;
|
||||
Item_result res_type= item_cmp_type(comp_item, item);
|
||||
char *name=item->name; // Alloced by sql_alloc
|
||||
char *name= item->name; // Alloced on THD::mem_root
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
|
||||
switch (res_type) {
|
||||
|
|
20
sql/item.h
20
sql/item.h
|
@ -696,7 +696,7 @@ public:
|
|||
bool with_subselect; /* If this item is a subselect or some
|
||||
of its arguments is or contains a
|
||||
subselect */
|
||||
// alloc & destruct is done as start of select using sql_alloc
|
||||
// alloc & destruct is done as start of select on THD::mem_root
|
||||
Item(THD *thd);
|
||||
/*
|
||||
Constructor used by Item_field, Item_ref & aggregate (sum) functions.
|
||||
|
@ -3560,28 +3560,28 @@ public:
|
|||
{
|
||||
args[0]= a; args[1]= b;
|
||||
}
|
||||
Item_args(Item *a, Item *b, Item *c)
|
||||
Item_args(THD *thd, Item *a, Item *b, Item *c)
|
||||
{
|
||||
arg_count= 0;
|
||||
if ((args= (Item**) sql_alloc(sizeof(Item*) * 3)))
|
||||
if ((args= (Item**) thd_alloc(thd, sizeof(Item*) * 3)))
|
||||
{
|
||||
arg_count= 3;
|
||||
args[0]= a; args[1]= b; args[2]= c;
|
||||
}
|
||||
}
|
||||
Item_args(Item *a, Item *b, Item *c, Item *d)
|
||||
Item_args(THD *thd, Item *a, Item *b, Item *c, Item *d)
|
||||
{
|
||||
arg_count= 0;
|
||||
if ((args= (Item**) sql_alloc(sizeof(Item*) * 4)))
|
||||
if ((args= (Item**) thd_alloc(thd, sizeof(Item*) * 4)))
|
||||
{
|
||||
arg_count= 4;
|
||||
args[0]= a; args[1]= b; args[2]= c; args[3]= d;
|
||||
}
|
||||
}
|
||||
Item_args(Item *a, Item *b, Item *c, Item *d, Item* e)
|
||||
Item_args(THD *thd, Item *a, Item *b, Item *c, Item *d, Item* e)
|
||||
{
|
||||
arg_count= 5;
|
||||
if ((args= (Item**) sql_alloc(sizeof(Item*) * 5)))
|
||||
if ((args= (Item**) thd_alloc(thd, sizeof(Item*) * 5)))
|
||||
{
|
||||
arg_count= 5;
|
||||
args[0]= a; args[1]= b; args[2]= c; args[3]= d; args[4]= e;
|
||||
|
@ -3791,11 +3791,11 @@ public:
|
|||
Item_func_or_sum(THD *thd, Item *a, Item *b):
|
||||
Item_result_field(thd), Item_args(a, b) { }
|
||||
Item_func_or_sum(THD *thd, Item *a, Item *b, Item *c):
|
||||
Item_result_field(thd), Item_args(a, b, c) { }
|
||||
Item_result_field(thd), Item_args(thd, a, b, c) { }
|
||||
Item_func_or_sum(THD *thd, Item *a, Item *b, Item *c, Item *d):
|
||||
Item_result_field(thd), Item_args(a, b, c, d) { }
|
||||
Item_result_field(thd), Item_args(thd, a, b, c, d) { }
|
||||
Item_func_or_sum(THD *thd, Item *a, Item *b, Item *c, Item *d, Item *e):
|
||||
Item_result_field(thd), Item_args(a, b, c, d, e) { }
|
||||
Item_result_field(thd), Item_args(thd, a, b, c, d, e) { }
|
||||
Item_func_or_sum(THD *thd, Item_func_or_sum *item):
|
||||
Item_result_field(thd, item), Item_args(thd, item),
|
||||
Used_tables_and_const_cache(item) { }
|
||||
|
|
|
@ -1846,8 +1846,8 @@ void Item_func_interval::fix_length_and_dec()
|
|||
}
|
||||
|
||||
if (not_null_consts &&
|
||||
(intervals=
|
||||
(interval_range*) sql_alloc(sizeof(interval_range) * (rows - 1))))
|
||||
(intervals= (interval_range*) current_thd->alloc(sizeof(interval_range) *
|
||||
(rows - 1))))
|
||||
{
|
||||
if (use_decimal_comparison)
|
||||
{
|
||||
|
@ -3462,7 +3462,7 @@ in_string::~in_string()
|
|||
{
|
||||
if (base)
|
||||
{
|
||||
// base was allocated with help of sql_alloc => following is OK
|
||||
// base was allocated on THD::mem_root => following is OK
|
||||
for (uint i=0 ; i < count ; i++)
|
||||
((String*) base)[i].free();
|
||||
}
|
||||
|
@ -6567,10 +6567,9 @@ longlong Item_func_dyncol_exists::val_int()
|
|||
}
|
||||
else
|
||||
{
|
||||
uint strlen;
|
||||
uint strlen= nm->length() * my_charset_utf8_general_ci.mbmaxlen + 1;
|
||||
uint dummy_errors;
|
||||
buf.str= (char *)sql_alloc((strlen= nm->length() *
|
||||
my_charset_utf8_general_ci.mbmaxlen + 1));
|
||||
buf.str= (char *) current_thd->alloc(strlen);
|
||||
if (buf.str)
|
||||
{
|
||||
buf.length=
|
||||
|
|
|
@ -3553,7 +3553,7 @@ udf_handler::fix_fields(THD *thd, Item_func_or_sum *func,
|
|||
func->used_tables_and_const_cache_join(item);
|
||||
f_args.arg_type[i]=item->result_type();
|
||||
}
|
||||
//TODO: why all following memory is not allocated with 1 call of sql_alloc?
|
||||
//TODO: why all following memory is not allocated with 1 thd->alloc() call?
|
||||
if (!(buffers=new String[arg_count]) ||
|
||||
!(f_args.args= (char**) thd->alloc(arg_count * sizeof(char *))) ||
|
||||
!(f_args.lengths= (ulong*) thd->alloc(arg_count * sizeof(long))) ||
|
||||
|
|
|
@ -4436,11 +4436,9 @@ bool Item_func_dyncol_create::prepare_arguments(THD *thd, bool force_names_arg)
|
|||
}
|
||||
else
|
||||
{
|
||||
uint strlen;
|
||||
uint strlen= res->length() * my_charset_utf8_general_ci.mbmaxlen + 1;
|
||||
uint dummy_errors;
|
||||
char *str=
|
||||
(char *)sql_alloc((strlen= res->length() *
|
||||
my_charset_utf8_general_ci.mbmaxlen + 1));
|
||||
char *str= (char *) thd->alloc(strlen);
|
||||
if (str)
|
||||
{
|
||||
keys_str[i].length=
|
||||
|
@ -4742,7 +4740,8 @@ void Item_func_dyncol_add::print(String *str,
|
|||
This function ensures that null_value is set correctly
|
||||
*/
|
||||
|
||||
bool Item_dyncol_get::get_dyn_value(DYNAMIC_COLUMN_VALUE *val, String *tmp)
|
||||
bool Item_dyncol_get::get_dyn_value(THD *thd, DYNAMIC_COLUMN_VALUE *val,
|
||||
String *tmp)
|
||||
{
|
||||
DYNAMIC_COLUMN dyn_str;
|
||||
String *res;
|
||||
|
@ -4770,10 +4769,9 @@ bool Item_dyncol_get::get_dyn_value(DYNAMIC_COLUMN_VALUE *val, String *tmp)
|
|||
}
|
||||
else
|
||||
{
|
||||
uint strlen;
|
||||
uint strlen= nm->length() * my_charset_utf8_general_ci.mbmaxlen + 1;
|
||||
uint dummy_errors;
|
||||
buf.str= (char *)sql_alloc((strlen= nm->length() *
|
||||
my_charset_utf8_general_ci.mbmaxlen + 1));
|
||||
buf.str= (char *) thd->alloc(strlen);
|
||||
if (buf.str)
|
||||
{
|
||||
buf.length=
|
||||
|
@ -4823,7 +4821,7 @@ String *Item_dyncol_get::val_str(String *str_result)
|
|||
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||
String tmp(buff, sizeof(buff), &my_charset_bin);
|
||||
|
||||
if (get_dyn_value(&val, &tmp))
|
||||
if (get_dyn_value(current_thd, &val, &tmp))
|
||||
return NULL;
|
||||
|
||||
switch (val.type) {
|
||||
|
@ -4905,11 +4903,12 @@ null:
|
|||
|
||||
longlong Item_dyncol_get::val_int()
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
DYNAMIC_COLUMN_VALUE val;
|
||||
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||
String tmp(buff, sizeof(buff), &my_charset_bin);
|
||||
|
||||
if (get_dyn_value(&val, &tmp))
|
||||
if (get_dyn_value(thd, &val, &tmp))
|
||||
return 0;
|
||||
|
||||
switch (val.type) {
|
||||
|
@ -4930,7 +4929,6 @@ longlong Item_dyncol_get::val_int()
|
|||
num= double_to_longlong(val.x.double_value, unsigned_flag, &error);
|
||||
if (error)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
char buff[30];
|
||||
sprintf(buff, "%lg", val.x.double_value);
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
|
@ -4950,7 +4948,6 @@ longlong Item_dyncol_get::val_int()
|
|||
num= my_strtoll10(val.x.string.value.str, &end, &error);
|
||||
if (end != org_end || error > 0)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_BAD_DATA,
|
||||
ER_THD(thd, ER_BAD_DATA),
|
||||
|
@ -4987,11 +4984,12 @@ null:
|
|||
|
||||
double Item_dyncol_get::val_real()
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
DYNAMIC_COLUMN_VALUE val;
|
||||
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||
String tmp(buff, sizeof(buff), &my_charset_bin);
|
||||
|
||||
if (get_dyn_value(&val, &tmp))
|
||||
if (get_dyn_value(thd, &val, &tmp))
|
||||
return 0.0;
|
||||
|
||||
switch (val.type) {
|
||||
|
@ -5014,7 +5012,6 @@ double Item_dyncol_get::val_real()
|
|||
if (end != (char*) val.x.string.value.str + val.x.string.value.length ||
|
||||
error)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_BAD_DATA,
|
||||
ER_THD(thd, ER_BAD_DATA),
|
||||
|
@ -5046,11 +5043,12 @@ null:
|
|||
|
||||
my_decimal *Item_dyncol_get::val_decimal(my_decimal *decimal_value)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
DYNAMIC_COLUMN_VALUE val;
|
||||
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||
String tmp(buff, sizeof(buff), &my_charset_bin);
|
||||
|
||||
if (get_dyn_value(&val, &tmp))
|
||||
if (get_dyn_value(thd, &val, &tmp))
|
||||
return NULL;
|
||||
|
||||
switch (val.type) {
|
||||
|
@ -5075,7 +5073,6 @@ my_decimal *Item_dyncol_get::val_decimal(my_decimal *decimal_value)
|
|||
if (rc != E_DEC_OK ||
|
||||
end != val.x.string.value.str + val.x.string.value.length)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_BAD_DATA,
|
||||
ER_THD(thd, ER_BAD_DATA),
|
||||
|
@ -5110,7 +5107,7 @@ bool Item_dyncol_get::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
|
|||
String tmp(buff, sizeof(buff), &my_charset_bin);
|
||||
bool signed_value= 0;
|
||||
|
||||
if (get_dyn_value(&val, &tmp))
|
||||
if (get_dyn_value(current_thd, &val, &tmp))
|
||||
return 1; // Error
|
||||
|
||||
switch (val.type) {
|
||||
|
|
|
@ -1253,7 +1253,7 @@ public:
|
|||
longlong val_int();
|
||||
double val_real();
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool get_dyn_value(DYNAMIC_COLUMN_VALUE *val, String *tmp);
|
||||
bool get_dyn_value(THD *thd, DYNAMIC_COLUMN_VALUE *val, String *tmp);
|
||||
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
|
||||
void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
|
|
@ -1149,7 +1149,8 @@ void Item_singlerow_subselect::fix_length_and_dec()
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!(row= (Item_cache**) sql_alloc(sizeof(Item_cache*)*max_columns)))
|
||||
if (!(row= (Item_cache**) current_thd->alloc(sizeof(Item_cache*) *
|
||||
max_columns)))
|
||||
return;
|
||||
engine->fix_length_and_dec(row);
|
||||
value= *row;
|
||||
|
|
|
@ -711,7 +711,6 @@ SHOW_COMP_OPTION have_openssl;
|
|||
|
||||
/* Thread specific variables */
|
||||
|
||||
pthread_key(MEM_ROOT**,THR_MALLOC);
|
||||
pthread_key(THD*, THR_THD);
|
||||
mysql_mutex_t LOCK_thread_count, LOCK_thread_cache;
|
||||
mysql_mutex_t
|
||||
|
@ -2051,8 +2050,6 @@ static void cleanup_tls()
|
|||
{
|
||||
if (THR_THD)
|
||||
(void)pthread_key_delete(THR_THD);
|
||||
if (THR_MALLOC)
|
||||
(void)pthread_key_delete(THR_MALLOC);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4082,8 +4079,7 @@ static int init_common_variables()
|
|||
connection_errors_peer_addr= 0;
|
||||
my_decimal_set_zero(&decimal_zero); // set decimal_zero constant;
|
||||
|
||||
if (pthread_key_create(&THR_THD,NULL) ||
|
||||
pthread_key_create(&THR_MALLOC,NULL))
|
||||
if (pthread_key_create(&THR_THD, NULL))
|
||||
{
|
||||
sql_print_error("Can't create thread-keys");
|
||||
return 1;
|
||||
|
|
|
@ -262,12 +262,6 @@ extern my_bool encrypt_tmp_disk_tables, encrypt_tmp_files;
|
|||
extern ulong encryption_algorithm;
|
||||
extern const char *encryption_algorithm_names[];
|
||||
|
||||
/*
|
||||
THR_MALLOC is a key which will be used to set/get MEM_ROOT** for a thread,
|
||||
using my_pthread_setspecific_ptr()/my_thread_getspecific_ptr().
|
||||
*/
|
||||
extern pthread_key(MEM_ROOT**,THR_MALLOC);
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#ifdef HAVE_MMAP
|
||||
extern PSI_mutex_key key_PAGE_lock, key_LOCK_sync, key_LOCK_active,
|
||||
|
|
|
@ -1184,7 +1184,7 @@ sp_head::execute(THD *thd, bool merge_da_on_success)
|
|||
|
||||
/*
|
||||
Switch query context. This has to be done early as this is sometimes
|
||||
allocated trough sql_alloc
|
||||
allocated on THD::mem_root
|
||||
*/
|
||||
if (m_creation_ctx)
|
||||
saved_creation_ctx= m_creation_ctx->set_n_backup(thd);
|
||||
|
@ -2291,9 +2291,9 @@ sp_head::restore_lex(THD *thd)
|
|||
Put the instruction on the backpatch list, associated with the label.
|
||||
*/
|
||||
int
|
||||
sp_head::push_backpatch(sp_instr *i, sp_label *lab)
|
||||
sp_head::push_backpatch(THD *thd, sp_instr *i, sp_label *lab)
|
||||
{
|
||||
bp_t *bp= (bp_t *)sql_alloc(sizeof(bp_t));
|
||||
bp_t *bp= (bp_t *) thd->alloc(sizeof(bp_t));
|
||||
|
||||
if (!bp)
|
||||
return 1;
|
||||
|
|
|
@ -386,7 +386,7 @@ public:
|
|||
|
||||
/// Put the instruction on the backpatch list, associated with the label.
|
||||
int
|
||||
push_backpatch(sp_instr *, sp_label *);
|
||||
push_backpatch(THD *thd, sp_instr *, sp_label *);
|
||||
|
||||
/// Update all instruction with this label in the backpatch list to
|
||||
/// the current position.
|
||||
|
|
|
@ -6584,12 +6584,10 @@ bool grant_init()
|
|||
|
||||
static bool grant_load(THD *thd, TABLE_LIST *tables)
|
||||
{
|
||||
MEM_ROOT *memex_ptr;
|
||||
bool return_val= 1;
|
||||
TABLE *t_table, *c_table, *p_table;
|
||||
bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
|
||||
MEM_ROOT **save_mem_root_ptr= my_pthread_getspecific_ptr(MEM_ROOT**,
|
||||
THR_MALLOC);
|
||||
MEM_ROOT *save_mem_root= thd->mem_root;
|
||||
ulonglong old_sql_mode= thd->variables.sql_mode;
|
||||
DBUG_ENTER("grant_load");
|
||||
|
||||
|
@ -6614,15 +6612,14 @@ static bool grant_load(THD *thd, TABLE_LIST *tables)
|
|||
t_table->use_all_columns();
|
||||
c_table->use_all_columns();
|
||||
|
||||
memex_ptr= &grant_memroot;
|
||||
my_pthread_setspecific_ptr(THR_MALLOC, &memex_ptr);
|
||||
thd->mem_root= &grant_memroot;
|
||||
|
||||
if (!t_table->file->ha_index_first(t_table->record[0]))
|
||||
{
|
||||
do
|
||||
{
|
||||
GRANT_TABLE *mem_check;
|
||||
if (!(mem_check=new (memex_ptr) GRANT_TABLE(t_table,c_table)))
|
||||
if (!(mem_check= new (&grant_memroot) GRANT_TABLE(t_table, c_table)))
|
||||
{
|
||||
/* This could only happen if we are out memory */
|
||||
goto end_unlock;
|
||||
|
@ -6667,7 +6664,7 @@ static bool grant_load(THD *thd, TABLE_LIST *tables)
|
|||
{
|
||||
GRANT_NAME *mem_check;
|
||||
HASH *hash;
|
||||
if (!(mem_check=new (memex_ptr) GRANT_NAME(p_table, TRUE)))
|
||||
if (!(mem_check= new (&grant_memroot) GRANT_NAME(p_table, TRUE)))
|
||||
{
|
||||
/* This could only happen if we are out memory */
|
||||
goto end_unlock_p;
|
||||
|
@ -6720,7 +6717,7 @@ end_unlock_p:
|
|||
p_table->file->ha_index_end();
|
||||
end_unlock:
|
||||
t_table->file->ha_index_end();
|
||||
my_pthread_setspecific_ptr(THR_MALLOC, save_mem_root_ptr);
|
||||
thd->mem_root= save_mem_root;
|
||||
end_index_init:
|
||||
thd->variables.sql_mode= old_sql_mode;
|
||||
DBUG_RETURN(return_val);
|
||||
|
|
|
@ -134,7 +134,7 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
|
|||
}
|
||||
|
||||
if (!(pc->f_info=
|
||||
(field_info**)sql_alloc(sizeof(field_info*)*field_list.elements)))
|
||||
(field_info**) thd->alloc(sizeof(field_info*) * field_list.elements)))
|
||||
goto err;
|
||||
pc->f_end = pc->f_info + field_list.elements;
|
||||
pc->fields = field_list;
|
||||
|
|
|
@ -369,16 +369,6 @@ void thd_close_connection(THD *thd)
|
|||
vio_close(thd->net.vio);
|
||||
}
|
||||
|
||||
/**
|
||||
Get current THD object from thread local data
|
||||
|
||||
@retval The THD object for the thread, NULL if not connection thread
|
||||
*/
|
||||
THD *thd_get_current_thd()
|
||||
{
|
||||
return current_thd;
|
||||
}
|
||||
|
||||
/**
|
||||
Lock data that needs protection in THD object
|
||||
|
||||
|
@ -468,6 +458,16 @@ my_socket thd_get_fd(THD *thd)
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
Get current THD object from thread local data
|
||||
|
||||
@retval The THD object for the thread, NULL if not connection thread
|
||||
*/
|
||||
THD *thd_get_current_thd()
|
||||
{
|
||||
return current_thd;
|
||||
}
|
||||
|
||||
/**
|
||||
Get thread attributes for connection threads
|
||||
|
||||
|
@ -2043,7 +2043,7 @@ int killed_errno(killed_state killed)
|
|||
|
||||
/*
|
||||
Remember the location of thread info, the structure needed for
|
||||
sql_alloc() and the structure for the net buffer
|
||||
the structure for the net buffer
|
||||
*/
|
||||
|
||||
bool THD::store_globals()
|
||||
|
@ -2054,8 +2054,7 @@ bool THD::store_globals()
|
|||
*/
|
||||
DBUG_ASSERT(thread_stack);
|
||||
|
||||
if (set_current_thd(this) ||
|
||||
my_pthread_setspecific_ptr(THR_MALLOC, &mem_root))
|
||||
if (set_current_thd(this))
|
||||
return 1;
|
||||
/*
|
||||
mysys_var is concurrently readable by a killer thread.
|
||||
|
@ -2108,7 +2107,6 @@ void THD::reset_globals()
|
|||
|
||||
/* Undocking the thread specific data. */
|
||||
set_current_thd(0);
|
||||
my_pthread_setspecific_ptr(THR_MALLOC, NULL);
|
||||
net.thd= 0;
|
||||
}
|
||||
|
||||
|
@ -3547,7 +3545,7 @@ void Query_arena::free_items()
|
|||
{
|
||||
Item *next;
|
||||
DBUG_ENTER("Query_arena::free_items");
|
||||
/* This works because items are allocated with sql_alloc() */
|
||||
/* This works because items are allocated on THD::mem_root */
|
||||
for (; free_list; free_list= next)
|
||||
{
|
||||
next= free_list->next;
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "violite.h" /* vio_is_connected */
|
||||
#include "thr_lock.h" /* thr_lock_type, THR_LOCK_DATA, THR_LOCK_INFO */
|
||||
#include "thr_timer.h"
|
||||
#include "thr_malloc.h"
|
||||
|
||||
#include "sql_digest_stream.h" // sql_digest_state
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
then do { handler_items=concat(handler_items, free_list); free_list=0; }
|
||||
|
||||
But !!! do_command calls free_root at the end of every query and frees up
|
||||
all the sql_alloc'ed memory. It's harder to work around...
|
||||
all the memory allocated on THD::mem_root. It's harder to work around...
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -496,10 +496,6 @@ public:
|
|||
enum sub_select_type linkage;
|
||||
bool no_table_names_allowed; /* used for global order by */
|
||||
|
||||
static void *operator new(size_t size) throw ()
|
||||
{
|
||||
return sql_alloc(size);
|
||||
}
|
||||
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
|
||||
{ return (void*) alloc_root(mem_root, (uint) size); }
|
||||
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
#include "my_sys.h" /* alloc_root, TRASH, MY_WME,
|
||||
MY_FAE, MY_ALLOW_ZERO_PTR */
|
||||
#include "m_string.h" /* bfill */
|
||||
#include "thr_malloc.h" /* sql_alloc */
|
||||
|
||||
THD *thd_get_current_thd();
|
||||
|
||||
/* mysql standard class memory allocator */
|
||||
|
||||
|
@ -31,11 +32,11 @@ class Sql_alloc
|
|||
public:
|
||||
static void *operator new(size_t size) throw ()
|
||||
{
|
||||
return sql_alloc(size);
|
||||
return thd_alloc(thd_get_current_thd(), size);
|
||||
}
|
||||
static void *operator new[](size_t size) throw ()
|
||||
{
|
||||
return sql_alloc(size);
|
||||
return thd_alloc(thd_get_current_thd(), size);
|
||||
}
|
||||
static void *operator new[](size_t size, MEM_ROOT *mem_root) throw ()
|
||||
{ return alloc_root(mem_root, size); }
|
||||
|
|
|
@ -86,7 +86,7 @@ public:
|
|||
CHARSET_INFO *read_charset;
|
||||
LOAD_FILE_IO_CACHE cache;
|
||||
|
||||
READ_INFO(File file,uint tot_length,CHARSET_INFO *cs,
|
||||
READ_INFO(THD *thd, File file, uint tot_length, CHARSET_INFO *cs,
|
||||
String &field_term,String &line_start,String &line_term,
|
||||
String &enclosed,int escape,bool get_it_from_net, bool is_fifo);
|
||||
~READ_INFO();
|
||||
|
@ -437,7 +437,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||
!(thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)))
|
||||
? (*escaped)[0] : INT_MAX;
|
||||
|
||||
READ_INFO read_info(file,tot_length,
|
||||
READ_INFO read_info(thd, file, tot_length,
|
||||
ex->cs ? ex->cs : thd->variables.collation_database,
|
||||
*field_term,*ex->line_start, *ex->line_term, *enclosed,
|
||||
info.escape_char, read_file_from_client, is_fifo);
|
||||
|
@ -1330,7 +1330,7 @@ READ_INFO::unescape(char chr)
|
|||
*/
|
||||
|
||||
|
||||
READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
|
||||
READ_INFO::READ_INFO(THD *thd, File file_par, uint tot_length, CHARSET_INFO *cs,
|
||||
String &field_term, String &line_start, String &line_term,
|
||||
String &enclosed_par, int escape, bool get_it_from_net,
|
||||
bool is_fifo)
|
||||
|
@ -1377,7 +1377,7 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
|
|||
/* Set of a stack for unget if long terminators */
|
||||
uint length= MY_MAX(cs->mbmaxlen, MY_MAX(field_term_length, line_term_length)) + 1;
|
||||
set_if_bigger(length,line_start.length());
|
||||
stack=stack_pos=(int*) sql_alloc(sizeof(int)*length);
|
||||
stack= stack_pos= (int*) thd->alloc(sizeof(int) * length);
|
||||
|
||||
if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(MY_THREAD_SPECIFIC))))
|
||||
error=1; /* purecov: inspected */
|
||||
|
|
|
@ -858,7 +858,7 @@ end:
|
|||
}
|
||||
|
||||
|
||||
/* This works because items are allocated with sql_alloc() */
|
||||
/* This works because items are allocated on THD::mem_root */
|
||||
|
||||
void free_items(Item *item)
|
||||
{
|
||||
|
@ -873,7 +873,7 @@ void free_items(Item *item)
|
|||
}
|
||||
|
||||
/**
|
||||
This works because items are allocated with sql_alloc().
|
||||
This works because items are allocated on THD::mem_root.
|
||||
@note The function also handles null pointers (empty list).
|
||||
*/
|
||||
void cleanup_items(Item *item)
|
||||
|
@ -2099,7 +2099,7 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
|
|||
{
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
schema_select_lex= new SELECT_LEX();
|
||||
schema_select_lex= new (thd->mem_root) SELECT_LEX();
|
||||
db.str= schema_select_lex->db= lex->select_lex.db;
|
||||
schema_select_lex->table_list.first= NULL;
|
||||
db.length= strlen(db.str);
|
||||
|
@ -2122,7 +2122,7 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
|
|||
#else
|
||||
DBUG_ASSERT(table_ident);
|
||||
TABLE_LIST **query_tables_last= lex->query_tables_last;
|
||||
schema_select_lex= new SELECT_LEX();
|
||||
schema_select_lex= new (thd->mem_root) SELECT_LEX();
|
||||
/* 'parent_lex' is used in init_query() so it must be before it. */
|
||||
schema_select_lex->parent_lex= lex;
|
||||
schema_select_lex->init_query();
|
||||
|
|
|
@ -2468,7 +2468,7 @@ static int add_key_with_algorithm(File fptr, partition_info *part_info,
|
|||
common queries.
|
||||
*/
|
||||
|
||||
char *generate_partition_syntax(partition_info *part_info,
|
||||
char *generate_partition_syntax(THD *thd, partition_info *part_info,
|
||||
uint *buf_length,
|
||||
bool use_sql_alloc,
|
||||
bool show_partition_options,
|
||||
|
@ -2642,7 +2642,7 @@ char *generate_partition_syntax(partition_info *part_info,
|
|||
goto close_file;
|
||||
*buf_length= (uint)buffer_length;
|
||||
if (use_sql_alloc)
|
||||
buf= (char*) sql_alloc(*buf_length+1);
|
||||
buf= (char*) thd->alloc(*buf_length + 1);
|
||||
else
|
||||
buf= (char*) my_malloc(*buf_length+1, MYF(MY_WME));
|
||||
if (!buf)
|
||||
|
|
|
@ -262,7 +262,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
Alter_table_ctx *alter_ctx,
|
||||
bool *partition_changed,
|
||||
bool *fast_alter_table);
|
||||
char *generate_partition_syntax(partition_info *part_info,
|
||||
char *generate_partition_syntax(THD *thd, partition_info *part_info,
|
||||
uint *buf_length, bool use_sql_alloc,
|
||||
bool show_partition_options,
|
||||
HA_CREATE_INFO *create_info,
|
||||
|
|
|
@ -12372,9 +12372,9 @@ static void clear_tables(JOIN *join)
|
|||
|
||||
class COND_CMP :public ilink {
|
||||
public:
|
||||
static void *operator new(size_t size)
|
||||
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
||||
{
|
||||
return (void*) sql_alloc((uint) size);
|
||||
return alloc_root(mem_root, size);
|
||||
}
|
||||
static void operator delete(void *ptr __attribute__((unused)),
|
||||
size_t size __attribute__((unused)))
|
||||
|
@ -13994,7 +13994,7 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list,
|
|||
{
|
||||
cond->marker=1;
|
||||
COND_CMP *tmp2;
|
||||
if ((tmp2=new COND_CMP(and_father,func)))
|
||||
if ((tmp2= new (thd->mem_root) COND_CMP(and_father, func)))
|
||||
save_list->push_back(tmp2);
|
||||
}
|
||||
/*
|
||||
|
@ -14026,7 +14026,7 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list,
|
|||
thd->change_item_tree(args + 1, value);
|
||||
cond->marker=1;
|
||||
COND_CMP *tmp2;
|
||||
if ((tmp2=new COND_CMP(and_father,func)))
|
||||
if ((tmp2=new (thd->mem_root) COND_CMP(and_father, func)))
|
||||
save_list->push_back(tmp2);
|
||||
}
|
||||
if (functype != Item_func::LIKE_FUNC)
|
||||
|
|
|
@ -2123,7 +2123,7 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet,
|
|||
char *part_syntax;
|
||||
String comment_start;
|
||||
table->part_info->set_show_version_string(&comment_start);
|
||||
if ((part_syntax= generate_partition_syntax(table->part_info,
|
||||
if ((part_syntax= generate_partition_syntax(thd, table->part_info,
|
||||
&part_syntax_len,
|
||||
FALSE,
|
||||
show_table_options,
|
||||
|
|
|
@ -1677,7 +1677,7 @@ public:
|
|||
}
|
||||
|
||||
if ((calc_state=
|
||||
(Prefix_calc_state *) sql_alloc(sizeof(Prefix_calc_state)*key_parts)))
|
||||
(Prefix_calc_state *) thd->alloc(sizeof(Prefix_calc_state)*key_parts)))
|
||||
{
|
||||
uint keyno= key_info-table->key_info;
|
||||
for (i= 0, state= calc_state; i < key_parts; i++, state++)
|
||||
|
|
|
@ -1814,7 +1814,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
|
|||
partition_info *part_info= lpt->table->part_info;
|
||||
if (part_info)
|
||||
{
|
||||
if (!(part_syntax_buf= generate_partition_syntax(part_info,
|
||||
if (!(part_syntax_buf= generate_partition_syntax(lpt->thd, part_info,
|
||||
&syntax_len,
|
||||
TRUE, TRUE,
|
||||
lpt->create_info,
|
||||
|
@ -1897,7 +1897,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
|
|||
{
|
||||
TABLE_SHARE *share= lpt->table->s;
|
||||
char *tmp_part_syntax_str;
|
||||
if (!(part_syntax_buf= generate_partition_syntax(part_info,
|
||||
if (!(part_syntax_buf= generate_partition_syntax(lpt->thd, part_info,
|
||||
&syntax_len,
|
||||
TRUE, TRUE,
|
||||
lpt->create_info,
|
||||
|
@ -4477,7 +4477,7 @@ handler *mysql_create_frm_image(THD *thd,
|
|||
We reverse the partitioning parser and generate a standard format
|
||||
for syntax stored in frm file.
|
||||
*/
|
||||
if (!(part_syntax_buf= generate_partition_syntax(part_info,
|
||||
if (!(part_syntax_buf= generate_partition_syntax(thd, part_info,
|
||||
&syntax_len,
|
||||
TRUE, TRUE,
|
||||
create_info,
|
||||
|
|
|
@ -317,7 +317,7 @@ int case_stmt_action_when(LEX *lex, Item *when, bool simple)
|
|||
*/
|
||||
|
||||
return !MY_TEST(i) ||
|
||||
sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0)) ||
|
||||
sp->push_backpatch(thd, i, ctx->push_label(thd, empty_lex_str, 0)) ||
|
||||
sp->add_cont_backpatch(i) ||
|
||||
sp->add_instr(i);
|
||||
}
|
||||
|
@ -351,7 +351,7 @@ int case_stmt_action_then(LEX *lex)
|
|||
(jump from instruction 4 to 12, 7 to 12 ... in the example)
|
||||
*/
|
||||
|
||||
return sp->push_backpatch(i, ctx->last_label());
|
||||
return sp->push_backpatch(lex->thd, i, ctx->last_label());
|
||||
}
|
||||
|
||||
static bool
|
||||
|
@ -3131,10 +3131,10 @@ sp_decl:
|
|||
|
||||
/* For continue handlers, mark end of handler scope. */
|
||||
if ($2 == sp_handler::CONTINUE &&
|
||||
sp->push_backpatch(i, ctx->last_label()))
|
||||
sp->push_backpatch(thd, i, ctx->last_label()))
|
||||
MYSQL_YYABORT;
|
||||
|
||||
if (sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0)))
|
||||
if (sp->push_backpatch(thd, i, ctx->push_label(thd, empty_lex_str, 0)))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
sp_hcond_list sp_proc_stmt
|
||||
|
@ -3159,7 +3159,7 @@ sp_decl:
|
|||
sp_instr_hreturn(sp->instructions(), ctx);
|
||||
if (i == NULL ||
|
||||
sp->add_instr(i) ||
|
||||
sp->push_backpatch(i, lex->spcont->last_label())) /* Block end */
|
||||
sp->push_backpatch(thd, i, lex->spcont->last_label())) /* Block end */
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
lex->sphead->backpatch(hlab);
|
||||
|
@ -3858,7 +3858,7 @@ sp_proc_stmt_leave:
|
|||
i= new (lex->thd->mem_root) sp_instr_jump(ip, ctx);
|
||||
if (i == NULL)
|
||||
MYSQL_YYABORT;
|
||||
sp->push_backpatch(i, lab); /* Jumping forward */
|
||||
sp->push_backpatch(thd, i, lab); /* Jumping forward */
|
||||
sp->add_instr(i);
|
||||
}
|
||||
}
|
||||
|
@ -4035,7 +4035,7 @@ sp_if:
|
|||
sp_instr_jump_if_not *i= new (lex->thd->mem_root)
|
||||
sp_instr_jump_if_not(ip, ctx, $2, lex);
|
||||
if (i == NULL ||
|
||||
sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0)) ||
|
||||
sp->push_backpatch(thd, i, ctx->push_label(thd, empty_lex_str, 0)) ||
|
||||
sp->add_cont_backpatch(i) ||
|
||||
sp->add_instr(i))
|
||||
MYSQL_YYABORT;
|
||||
|
@ -4052,7 +4052,7 @@ sp_if:
|
|||
sp->add_instr(i))
|
||||
MYSQL_YYABORT;
|
||||
sp->backpatch(ctx->pop_label());
|
||||
sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0));
|
||||
sp->push_backpatch(thd, i, ctx->push_label(thd, empty_lex_str, 0));
|
||||
}
|
||||
sp_elseifs
|
||||
{
|
||||
|
@ -4378,7 +4378,7 @@ sp_control_content:
|
|||
sp_instr_jump_if_not(ip, lex->spcont, $3, lex);
|
||||
if (i == NULL ||
|
||||
/* Jumping forward */
|
||||
sp->push_backpatch(i, lex->spcont->last_label()) ||
|
||||
sp->push_backpatch(thd, i, lex->spcont->last_label()) ||
|
||||
sp->new_cont_backpatch(i) ||
|
||||
sp->add_instr(i))
|
||||
MYSQL_YYABORT;
|
||||
|
|
10
sql/table.cc
10
sql/table.cc
|
@ -948,12 +948,10 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
|
|||
plugin_ref se_plugin= 0;
|
||||
keyinfo= &first_keyinfo;
|
||||
share->ext_key_parts= 0;
|
||||
MEM_ROOT **root_ptr, *old_root;
|
||||
MEM_ROOT *old_root= thd->mem_root;
|
||||
DBUG_ENTER("TABLE_SHARE::init_from_binary_frm_image");
|
||||
|
||||
root_ptr= my_pthread_getspecific_ptr(MEM_ROOT**, THR_MALLOC);
|
||||
old_root= *root_ptr;
|
||||
*root_ptr= &share->mem_root;
|
||||
thd->mem_root= &share->mem_root;
|
||||
|
||||
if (write && write_frm_image(frm_image, frm_length))
|
||||
goto err;
|
||||
|
@ -2087,7 +2085,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
|
|||
share->db_plugin= se_plugin;
|
||||
share->error= OPEN_FRM_OK;
|
||||
thd->status_var.opened_shares++;
|
||||
*root_ptr= old_root;
|
||||
thd->mem_root= old_root;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
err:
|
||||
|
@ -2100,7 +2098,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
|
|||
if (!thd->is_error())
|
||||
open_table_error(share, OPEN_FRM_CORRUPTED, share->open_errno);
|
||||
|
||||
*root_ptr= old_root;
|
||||
thd->mem_root= old_root;
|
||||
DBUG_RETURN(HA_ERR_NOT_A_TABLE);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,16 +66,7 @@ void init_sql_alloc(MEM_ROOT *mem_root, uint block_size, uint pre_alloc,
|
|||
}
|
||||
|
||||
|
||||
#ifndef MYSQL_CLIENT
|
||||
void *sql_alloc(size_t Size)
|
||||
{
|
||||
MEM_ROOT *root= *my_pthread_getspecific_ptr(MEM_ROOT**,THR_MALLOC);
|
||||
return alloc_root(root,Size);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
char *sql_strmake_with_convert(const char *str, size_t arg_length,
|
||||
char *sql_strmake_with_convert(THD *thd, const char *str, size_t arg_length,
|
||||
CHARSET_INFO *from_cs,
|
||||
size_t max_res_length,
|
||||
CHARSET_INFO *to_cs, size_t *result_length)
|
||||
|
@ -85,7 +76,7 @@ char *sql_strmake_with_convert(const char *str, size_t arg_length,
|
|||
max_res_length--; // Reserve place for end null
|
||||
|
||||
set_if_smaller(new_length, max_res_length);
|
||||
if (!(pos= (char*) sql_alloc(new_length+1)))
|
||||
if (!(pos= (char*) thd->alloc(new_length + 1)))
|
||||
return pos; // Error
|
||||
|
||||
if ((from_cs == &my_charset_bin) || (to_cs == &my_charset_bin))
|
||||
|
|
|
@ -22,8 +22,7 @@ typedef struct st_mem_root MEM_ROOT;
|
|||
|
||||
void init_sql_alloc(MEM_ROOT *root, uint block_size, uint pre_alloc_size,
|
||||
myf my_flags);
|
||||
void *sql_alloc(size_t);
|
||||
char *sql_strmake_with_convert(const char *str, size_t arg_length,
|
||||
char *sql_strmake_with_convert(THD *thd, const char *str, size_t arg_length,
|
||||
CHARSET_INFO *from_cs,
|
||||
size_t max_res_length,
|
||||
CHARSET_INFO *to_cs, size_t *result_length);
|
||||
|
|
|
@ -87,7 +87,6 @@ struct Worker_thread_context
|
|||
#endif
|
||||
pthread_setspecific(THR_KEY_mysys,mysys_var);
|
||||
pthread_setspecific(THR_THD, 0);
|
||||
pthread_setspecific(THR_MALLOC, 0);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1800,8 +1800,6 @@ end:
|
|||
delete thd;
|
||||
if (org_thd)
|
||||
org_thd->store_globals(); /* purecov: inspected */
|
||||
else
|
||||
my_pthread_setspecific_ptr(THR_MALLOC, 0);
|
||||
|
||||
default_tz= default_tz_name ? global_system_variables.time_zone
|
||||
: my_tz_SYSTEM;
|
||||
|
|
|
@ -921,9 +921,7 @@ static bool make_empty_rec(THD *thd, uchar *buff, uint table_options,
|
|||
thd->count_cuted_fields= CHECK_FIELD_WARN; // To find wrong default values
|
||||
while ((field=it++))
|
||||
{
|
||||
/*
|
||||
regfield don't have to be deleted as it's allocated with sql_alloc()
|
||||
*/
|
||||
/* regfield don't have to be deleted as it's allocated on THD::mem_root */
|
||||
Field *regfield= make_field(&share, thd->mem_root,
|
||||
buff+field->offset + data_offset,
|
||||
field->length,
|
||||
|
|
|
@ -435,8 +435,8 @@ static void _ma_check_print_msg(HA_CHECK *param, const char *msg_type,
|
|||
NullS) - name);
|
||||
/*
|
||||
TODO: switch from protocol to push_warning here. The main reason we didn't
|
||||
it yet is parallel repair. Due to following trace:
|
||||
ma_check_print_msg/push_warning/sql_alloc/my_pthread_getspecific_ptr.
|
||||
it yet is parallel repair, which threads have no THD object accessible via
|
||||
current_thd.
|
||||
|
||||
Also we likely need to lock mutex here (in both cases with protocol and
|
||||
push_warning).
|
||||
|
|
|
@ -166,8 +166,8 @@ static void mi_check_print_msg(HA_CHECK *param, const char* msg_type,
|
|||
name);
|
||||
/*
|
||||
TODO: switch from protocol to push_warning here. The main reason we didn't
|
||||
it yet is parallel repair. Due to following trace:
|
||||
mi_check_print_msg/push_warning/sql_alloc/my_pthread_getspecific_ptr.
|
||||
it yet is parallel repair, which threads have no THD object accessible via
|
||||
current_thd.
|
||||
|
||||
Also we likely need to lock mutex here (in both cases with protocol and
|
||||
push_warning).
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
#include "../myisam/ha_myisam.h"
|
||||
#include "ha_myisammrg.h"
|
||||
#include "myrg_def.h"
|
||||
#include "thr_malloc.h" // int_sql_alloc
|
||||
#include "thr_malloc.h" // init_sql_alloc
|
||||
#include "sql_class.h" // THD
|
||||
#include "debug_sync.h"
|
||||
|
||||
|
|
|
@ -8504,7 +8504,7 @@ int spider_discover_table_structure(
|
|||
DBUG_RETURN(ER_SPIDER_UNKNOWN_NUM);
|
||||
}
|
||||
#ifdef SPIDER_HAS_DISCOVER_TABLE_STRUCTURE_COMMENT
|
||||
if (!(part_syntax = generate_partition_syntax(part_info, &part_syntax_len,
|
||||
if (!(part_syntax = generate_partition_syntax(thd, part_info, &part_syntax_len,
|
||||
FALSE, TRUE, info, NULL, NULL)))
|
||||
#else
|
||||
if (!(part_syntax = generate_partition_syntax(part_info, &part_syntax_len,
|
||||
|
|
Loading…
Reference in a new issue