From 1502692322420df00b8a19cbe1287b5df4b0f294 Mon Sep 17 00:00:00 2001 From: "monty@mysql.com" <> Date: Thu, 24 Nov 2005 06:15:35 +0200 Subject: [PATCH] Added bitmap_buffer_size() Removed valgrind warnings when using not aligned bitmap buffer size Added setting of thread_stack --- include/my_bitmap.h | 1 + sql/handler.cc | 2 +- sql/opt_range.cc | 9 ++++----- sql/sql_insert.cc | 4 ++-- sql/sql_parse.cc | 1 + sql/sql_plugin.cc | 1 + 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/my_bitmap.h b/include/my_bitmap.h index b7ad575b2d3..33cd61de8a0 100644 --- a/include/my_bitmap.h +++ b/include/my_bitmap.h @@ -84,6 +84,7 @@ extern void bitmap_lock_xor(MY_BITMAP *map, const MY_BITMAP *map2); extern void bitmap_lock_invert(MY_BITMAP *map); #endif /* Fast, not thread safe, bitmap functions */ +#define bitmap_buffer_size(bits) 4*(((bits)+31)/32); #define no_bytes_in_map(map) (((map)->n_bits + 7)/8) #define no_words_in_map(map) (((map)->n_bits + 31)/32) #define bytes_word_aligned(bytes) (4*((bytes + 3)/4)) diff --git a/sql/handler.cc b/sql/handler.cc index 0977fb311d3..4d65f3322b1 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1304,7 +1304,7 @@ int handler::ha_initialise() int handler::ha_allocate_read_write_set(ulong no_fields) { - uint bitmap_size= 4*(((no_fields+1)+31)/32); + uint bitmap_size= bitmap_buffer_size(no_fields+1); uint32 *read_buf, *write_buf; #ifndef DEBUG_OFF my_bool r; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 21a3f87e0fd..766eb0d01f9 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1652,11 +1652,10 @@ public: static int fill_used_fields_bitmap(PARAM *param) { TABLE *table= param->table; - param->fields_bitmap_size= (table->s->fields/8 + 1); + param->fields_bitmap_size= bitmap_buffer_size(table->s->fields+1); uint32 *tmp; uint pk; - if (!(tmp= (uint32*)alloc_root(param->mem_root, - bytes_word_aligned(param->fields_bitmap_size))) || + if (!(tmp= (uint32*) alloc_root(param->mem_root,param->fields_bitmap_size)) || bitmap_init(¶m->needed_fields, tmp, param->fields_bitmap_size*8, FALSE)) return 1; @@ -2415,7 +2414,7 @@ ROR_SCAN_INFO *make_ror_scan(const PARAM *param, int idx, SEL_ARG *sel_arg) ror_scan->records= param->table->quick_rows[keynr]; if (!(bitmap_buf= (uint32*)alloc_root(param->mem_root, - bytes_word_aligned(param->fields_bitmap_size)))) + param->fields_bitmap_size))) DBUG_RETURN(NULL); if (bitmap_init(&ror_scan->covered_fields, bitmap_buf, @@ -2535,7 +2534,7 @@ ROR_INTERSECT_INFO* ror_intersect_init(const PARAM *param) return NULL; info->param= param; if (!(buf= (uint32*)alloc_root(param->mem_root, - bytes_word_aligned(param->fields_bitmap_size)))) + param->fields_bitmap_size))) return NULL; if (bitmap_init(&info->covered_fields, buf, param->fields_bitmap_size*8, FALSE)) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index dcaadef05dd..d4eba15b0db 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -700,7 +700,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) *trans_end= trans_start + num; Field_translator *trans; Field **field_ptr= table->field; - uint used_fields_buff_size= (table->s->fields + 7) / 8; + uint used_fields_buff_size= bitmap_buffer_size(table->s->fields); uint32 *used_fields_buff= (uint32*)thd->alloc(used_fields_buff_size); MY_BITMAP used_fields; DBUG_ENTER("check_key_in_view"); @@ -710,7 +710,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) DBUG_ASSERT(view->table != 0 && view->field_translation != 0); - bitmap_init(&used_fields, used_fields_buff, used_fields_buff_size * 8, 0); + bitmap_init(&used_fields, used_fields_buff, table->s->fields, 0); bitmap_clear_all(&used_fields); view->contain_auto_increment= 0; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 7c83c9fe522..9739b9275fd 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1176,6 +1176,7 @@ end_thread: or this thread has been schedule to handle the next query */ thd= current_thd; + thd->thread_stack= (char*) &thd; } while (!(test_flags & TEST_NO_THREADS)); /* The following is only executed if we are not using --one-thread */ return(0); /* purecov: deadcode */ diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index efe8f256af5..5bb9f11117c 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -446,6 +446,7 @@ void plugin_init(void) } init_sql_alloc(&mem, 1024, 0); initialized= 1; + new_thd->thread_stack= (char*) &tables; new_thd->store_globals(); new_thd->db= my_strdup("mysql", MYF(0)); new_thd->db_length= 5;