summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2005-11-24 06:15:35 +0200
committerunknown <monty@mysql.com>2005-11-24 06:15:35 +0200
commit0db7a010e4696a289c38e11eba9d6c6528e45d5c (patch)
tree679304b4beec8c60c002eae5bc3e5a5438cb6df3
parent81b2bbac056f21b0783f21a5830c07aba4850d85 (diff)
downloadmariadb-git-0db7a010e4696a289c38e11eba9d6c6528e45d5c.tar.gz
Added bitmap_buffer_size()
Removed valgrind warnings when using not aligned bitmap buffer size Added setting of thread_stack include/my_bitmap.h: Added bitmap_buffer_size() sql/handler.cc: use bitmap_buffer_size() sql/opt_range.cc: use bitmap_buffer_size() sql/sql_insert.cc: Use bitmap_buffer_size() sql/sql_parse.cc: Added setting of thread_stack when taking thread from thread cache sql/sql_plugin.cc: Set thread_stack
-rw-r--r--include/my_bitmap.h1
-rw-r--r--sql/handler.cc2
-rw-r--r--sql/opt_range.cc9
-rw-r--r--sql/sql_insert.cc4
-rw-r--r--sql/sql_parse.cc1
-rw-r--r--sql/sql_plugin.cc1
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(&param->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;