From f832b47833bd03fbb9e972508097f3f88c0ba184 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Sun, 3 Jul 2016 10:41:16 +0400 Subject: Removing the "thd" argument from Item::create_field_for_create_select(). "thd" is available through the "table" argument, as table->in_use. Backporting (partially) from 10.2. --- sql/sql_insert.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'sql/sql_insert.cc') diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index fcf8c143ec4..3efdd2535c2 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -3924,10 +3924,10 @@ void select_insert::abort_result_set() { CREATE TABLE (SELECT) ... ***************************************************************************/ -Field *Item::create_field_for_create_select(THD *thd, TABLE *table) +Field *Item::create_field_for_create_select(TABLE *table) { Field *def_field, *tmp_field; - return create_tmp_field(thd, table, this, type(), + return create_tmp_field(table->in_use, table, this, type(), (Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0); } @@ -4002,7 +4002,7 @@ static TABLE *create_table_from_items(THD *thd, while ((item=it++)) { - Field *tmp_field= item->create_field_for_create_select(thd, &tmp_table); + Field *tmp_field= item->create_field_for_create_select(&tmp_table); if (!tmp_field) DBUG_RETURN(NULL); -- cgit v1.2.1 From 3ccf8218bc03a9cc598cd2da5c5a98ea2412cc05 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Sun, 3 Jul 2016 11:20:46 +0400 Subject: Partial backporting of 7b50447aa6d051b8d14bb01ef14802cb8ffee223 (MDEV-9407, MDEV-9408) from 10.1 Needed to fix MDEV-10317 easier. --- sql/sql_insert.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'sql/sql_insert.cc') diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 3efdd2535c2..b97bae6b23c 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -3927,8 +3927,8 @@ void select_insert::abort_result_set() { Field *Item::create_field_for_create_select(TABLE *table) { Field *def_field, *tmp_field; - return create_tmp_field(table->in_use, table, this, type(), - (Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0); + return ::create_tmp_field(table->in_use, table, this, type(), + (Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0); } -- cgit v1.2.1 From eb32dfd8092a656e2eb77107d8b5d31e143e2cc4 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Wed, 3 Aug 2016 11:49:35 +0400 Subject: MDEV-10365 - Race condition in error handling of INSERT DELAYED Shared variables of Delayed_insert may be updated without mutex protection when delayed insert thread gets an error. Re-acquire mutex earlier, so that shared variables are protected. --- sql/sql_insert.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sql/sql_insert.cc') diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index c60ef6fcc6e..70a12faafb5 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -3238,6 +3238,7 @@ bool Delayed_insert::handle_inserts(void) max_rows= 0; // For DBUG output #endif /* Remove all not used rows */ + mysql_mutex_lock(&mutex); while ((row=rows.get())) { if (table->s->blob_fields) @@ -3254,7 +3255,6 @@ bool Delayed_insert::handle_inserts(void) } DBUG_PRINT("error", ("dropped %lu rows after an error", max_rows)); thread_safe_increment(delayed_insert_errors, &LOCK_delayed_status); - mysql_mutex_lock(&mutex); DBUG_RETURN(1); } #endif /* EMBEDDED_LIBRARY */ -- cgit v1.2.1