diff options
author | unknown <monty@mysql.com> | 2004-11-08 01:13:54 +0200 |
---|---|---|
committer | unknown <monty@mysql.com> | 2004-11-08 01:13:54 +0200 |
commit | 435b20aa6897b142f90267ea3ed7a7cef1cc385a (patch) | |
tree | 7a3852793309c847d2ee83023b9429b28913b390 /sql/opt_range.cc | |
parent | 43c6c27c905a47e062bfbf3e8908a8919d61b391 (diff) | |
download | mariadb-git-435b20aa6897b142f90267ea3ed7a7cef1cc385a.tar.gz |
Simpler arena swapping code
Now thd->mem_root is a pointer to thd->main_mem_root and THR_MALLOC is a pointer to thd->mem_root.
This gives us the following benefits:
- Allow us to easily detect if arena has already been swapped before (this fixes a bug in setup_conds() where arena was swaped twice in some cases)
- Faster swaps of arenas (as we don't have to copy the whole MEM_ROOT)
- We don't anymore have to call my_pthread_setspecific_ptr(THR_MALLOC,...) to change where memory is alloced. Now it's enough to set thd->mem_root
client/mysqltest.c:
Remove some not needed defines
(Things like this should be done in config-win.h)
include/config-win.h:
Added popen() and pclose() compatibility macros
mysql-test/t/rpl_failed_optimize-master.opt:
Portability fix
sql/ha_berkeley.cc:
New thd->memroot handling
sql/item_cmpfunc.cc:
Simpler arena swapping code
sql/item_func.cc:
Simpler arena swapping code
sql/item_subselect.cc:
Simpler arena swapping code
New thd->mem_root handling
sql/item_sum.cc:
New thd->mem_root handling
sql/item_timefunc.cc:
Fixed not-initalized usage errors found by valgrind
sql/log_event.cc:
New thd->mem_root handling
sql/mysql_priv.h:
New thd->mem_root handling
sql/mysqld.cc:
New thd->mem_root handling
sql/opt_range.cc:
New thd->mem_root handling
sql/repl_failsafe.cc:
New thd->mem_root handling
sql/set_var.cc:
New thd->mem_root handling
sql/sql_acl.cc:
New thd->mem_root handling
sql/sql_base.cc:
Simpler arena swapping code
New thd->mem_root handling
sql/sql_class.cc:
New thd->mem_root handling
sql/sql_class.h:
Simpler arena swapping code
New thd->mem_root handling
sql/sql_db.cc:
New thd->mem_root handling
sql/sql_error.cc:
New thd->mem_root handling
sql/sql_help.cc:
New thd->mem_root handling
sql/sql_insert.cc:
New thd->mem_root handling
sql/sql_parse.cc:
New thd->mem_root handling
Added some extra checking of return value of new
sql/sql_prepare.cc:
New thd->mem_root handling
sql/sql_select.cc:
New thd->mem_root handling
sql/sql_select.h:
New thd->mem_root handling
sql/sql_union.cc:
Simpler arena swapping code
sql/sql_yacc.yy:
New thd->mem_root handling
sql/table.cc:
New thd->mem_root handling
sql/thr_malloc.cc:
New thd->mem_root handling
tests/client_test.c:
Added drop table to some tests
Changed some table names to 't1'
Diffstat (limited to 'sql/opt_range.cc')
-rw-r--r-- | sql/opt_range.cc | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc index c9528af7d98..d25901e56b1 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -400,7 +400,7 @@ QUICK_SELECT::QUICK_SELECT(THD *thd, TABLE *table, uint key_nr, bool no_alloc) { // Allocates everything through the internal memroot init_sql_alloc(&alloc, thd->variables.range_alloc_block_size, 0); - my_pthread_setspecific_ptr(THR_MALLOC,&alloc); + thd->mem_root= &alloc; } else bzero((char*) &alloc,sizeof(alloc)); @@ -668,8 +668,8 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use, DBUG_RETURN(0); // Can't use range } key_parts= param.key_parts; - old_root=my_pthread_getspecific_ptr(MEM_ROOT*,THR_MALLOC); - my_pthread_setspecific_ptr(THR_MALLOC,&alloc); + old_root= thd->mem_root; + thd->mem_root= &alloc; key_info= head->key_info; for (idx=0 ; idx < head->keys ; idx++, key_info++) @@ -769,7 +769,7 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use, } } free_root(&alloc,MYF(0)); // Return memory & allocator - my_pthread_setspecific_ptr(THR_MALLOC,old_root); + thd->mem_root= old_root; thd->no_errors=0; } DBUG_EXECUTE("info",print_quick(quick,&needed_reg);); @@ -2563,7 +2563,8 @@ static bool null_part_in_key(KEY_PART *key_part, const char *key, uint length) QUICK_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, TABLE_REF *ref) { - MEM_ROOT *old_root= my_pthread_getspecific_ptr(MEM_ROOT*, THR_MALLOC); + MEM_ROOT *old_root= thd->mem_root; + /* The following call may change thd->mem_root */ QUICK_SELECT *quick= new QUICK_SELECT(thd, table, ref->key); KEY *key_info = &table->key_info[ref->key]; KEY_PART *key_part; @@ -2624,11 +2625,11 @@ QUICK_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, TABLE_REF *ref) } ok: - my_pthread_setspecific_ptr(THR_MALLOC, old_root); + thd->mem_root= old_root; return quick; err: - my_pthread_setspecific_ptr(THR_MALLOC, old_root); + thd->mem_root= old_root; delete quick; return 0; } |