From: Mayank Prasad Date: May 18 2011 2:17pm Subject: bzr commit into mysql-5.5 branch (mayank.prasad:3387) Bug#11764633 List-Archive: http://lists.mysql.com/commits/137614 X-Bug: 11764633 Message-Id: <201105181418.p4IEI1N4009895@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0693179076==" --===============0693179076== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/mayank/mysql-tree/mydefects/5.5_11764633/ based on revid:sergey.glukhov@stripped 3387 Mayank Prasad 2011-05-18 merge from 5.1 for bug#11764633 modified: libmysqld/lib_sql.cc sql/mysqld.h sql/sql_class.cc sql/sql_class.h === modified file 'libmysqld/lib_sql.cc' --- a/libmysqld/lib_sql.cc 2010-11-04 10:00:59 +0000 +++ b/libmysqld/lib_sql.cc 2011-05-18 14:17:29 +0000 @@ -50,6 +50,23 @@ extern "C" void unireg_clear(int exit_co DBUG_VOID_RETURN; } +/* + Wrapper error handler for embedded server to call client/server error + handler based on whether thread is in client/server context +*/ + +static void embedded_error_handler(uint error, const char *str, myf MyFlags) +{ + DBUG_ENTER("embedded_error_handler"); + + /* + If current_thd is NULL, it means restore_global has been called and + thread is in client context, then call client error handler else call + server error handler. + */ + DBUG_RETURN(current_thd ? my_message_sql(error, str, MyFlags): + my_message_stderr(error, str, MyFlags)); +} /* Reads error information from the MYSQL_DATA and puts @@ -106,7 +123,8 @@ emb_advanced_command(MYSQL *mysql, enum if (mysql->status != MYSQL_STATUS_READY) { set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate); - return 1; + result= 1; + goto end; } /* Clear result variables */ @@ -147,6 +165,9 @@ emb_advanced_command(MYSQL *mysql, enum #if defined(ENABLED_PROFILING) thd->profiling.finish_current_query(); #endif + +end: + thd->restore_globals(); return result; } @@ -545,7 +566,10 @@ int init_embedded_server(int argc, char return 1; } - error_handler_hook = my_message_sql; + /* + set error_handler_hook to embedded_error_handler wrapper. + */ + error_handler_hook= embedded_error_handler; acl_error= 0; #ifndef NO_EMBEDDED_ACCESS_CHECKS === modified file 'sql/mysqld.h' --- a/sql/mysqld.h 2011-04-22 06:56:56 +0000 +++ b/sql/mysqld.h 2011-05-18 14:17:29 +0000 @@ -216,6 +216,10 @@ extern char err_shared_dir[]; extern TYPELIB thread_handling_typelib; extern my_decimal decimal_zero; +/* + 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 @@ -503,6 +507,10 @@ get_thread_running() extern "C" THD *_current_thd_noinline(); #define _current_thd() _current_thd_noinline() #else +/* + THR_THD is a key which will be used to set/get THD* for a thread, + using my_pthread_setspecific_ptr()/my_thread_getspecific_ptr(). +*/ extern pthread_key(THD*, THR_THD); inline THD *_current_thd(void) { === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2011-04-21 05:34:21 +0000 +++ b/sql/sql_class.cc 2011-05-18 14:17:29 +0000 @@ -1354,6 +1354,25 @@ bool THD::store_globals() return 0; } +/* + Remove the thread specific info (THD and mem_root pointer) stored during + store_global call for this thread. +*/ +bool THD::restore_globals() +{ + /* + Assert that thread_stack is initialized: it's necessary to be able + to track stack overrun. + */ + DBUG_ASSERT(thread_stack); + + /* Undocking the thread specific data. */ + my_pthread_setspecific_ptr(THR_THD, NULL); + my_pthread_setspecific_ptr(THR_MALLOC, NULL); + + return 0; +} + /* Cleanup after query. === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2011-05-06 11:39:40 +0000 +++ b/sql/sql_class.h 2011-05-18 14:17:29 +0000 @@ -2199,6 +2199,7 @@ public: void cleanup(void); void cleanup_after_query(); bool store_globals(); + bool restore_globals(); #ifdef SIGNAL_WITH_VIO_CLOSE inline void set_active_vio(Vio* vio) { --===============0693179076== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mayank.prasad@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mayank.prasad@stripped\ # 925a2e76elxudi4r # target_branch: file:///home/mayank/mysql-tree/mydefects\ # /5.5_11764633/ # testament_sha1: ffbfb0618e60577deef6e4b1590ea1d8c2febff4 # timestamp: 2011-05-18 19:47:53 +0530 # source_branch: file:///home/mayank/mysql-tree/mydefects\ # /5.1_11764633_3/ # base_revision_id: sergey.glukhov@stripped\ # toptffucig2ae786 # # Begin bundle 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 UBI3hNsP8XckU4UJDruXcUA= --===============0693179076==--