From: Mayank Prasad Date: May 16 2011 2:19pm Subject: bzr commit into mysql-5.1 branch (mayank.prasad:3622) Bug#11764633 List-Archive: http://lists.mysql.com/commits/137450 X-Bug: 11764633 Message-Id: <201105161420.p4GEK7ih016199@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0322768538==" --===============0322768538== 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.1_11764633_3/ based on revid:vinay.fisrekar@stripped 3622 Mayank Prasad 2011-05-16 Bug#11764633 : 57491: THD->MAIN_DA.IS_OK() ASSERT IN EMBEDDED Issue: While running embedded server, if client issues TEE command (\T foo/bar) and "foo/bar" directory doesn't exist, it is suppose to give error. But it was aborting. This was happening because wrong error handler was being called. Solution: Modified calls to correct error handler. In embedded server case, there are two error handler (client and server) which are supposed to be called based on which context code is in. If it is in client context, client error handler should be called otherwise server. Test case: Test case automation is not possible as current (following) code doesn't allow '\T' to be executed from command line (OR command read from a file): [client/mysql.cc] ... static int com_tee(String *buffer __attribute__((unused)), char *line __attribute__((unused))) { char file_name[FN_REFLEN], *end, *param; if (status.batch) << THIS IS TRUE WHILE EXECUTING FROM COMMAND LINE. return 0; ... So, not adding test case in GA. WIll add a test case in mysql-trunk after removing above code so that this could be properly tested before GA. @ libmysqld/lib_sql.cc Added code to call client/server error handler based on in control is in client/server code respectively. @ sql/mysql_priv.h Added comments for THR_THD, THR_MALLOC keys. @ sql/sql_class.cc Function definition of new function restore_global to removes thread specific data from stack (which was stored in store global). @ sql/sql_class.h Function declaration of new function restore_global. modified: libmysqld/lib_sql.cc sql/mysql_priv.h sql/sql_class.cc sql/sql_class.h === modified file 'libmysqld/lib_sql.cc' --- a/libmysqld/lib_sql.cc 2009-12-18 18:44:24 +0000 +++ b/libmysqld/lib_sql.cc 2011-05-16 14:19:48 +0000 @@ -51,6 +51,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 int 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_no_curses(error, str, MyFlags)); +} /* Reads error information from the MYSQL_DATA and puts @@ -107,7 +124,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) && defined(COMMUNITY_SERVER) thd->profiling.finish_current_query(); #endif + +end: + thd->restore_globals(); return result; } @@ -525,7 +546,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/mysql_priv.h' --- a/sql/mysql_priv.h 2011-03-15 11:36:12 +0000 +++ b/sql/mysql_priv.h 2011-05-16 14:19:48 +0000 @@ -670,6 +670,10 @@ enum enum_check_fields 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) { @@ -2022,6 +2026,10 @@ extern TABLE_LIST general_log, slow_log; extern FILE *bootstrap_file; extern int bootstrap_error; extern FILE *stderror_file; +/* + 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); extern pthread_mutex_t LOCK_mysql_create_db,LOCK_Acl,LOCK_open, LOCK_lock_db, LOCK_mapped_file,LOCK_user_locks, LOCK_status, === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2011-04-07 18:12:54 +0000 +++ b/sql/sql_class.cc 2011-05-16 14:19:48 +0000 @@ -1196,6 +1196,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-02-22 21:03:32 +0000 +++ b/sql/sql_class.h 2011-05-16 14:19:48 +0000 @@ -1943,6 +1943,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) { --===============0322768538== 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\ # 4drcssrg5adhsyr1 # target_branch: file:///home/mayank/mysql-tree/mydefects\ # /5.1_11764633_3/ # testament_sha1: 28e5a18c6bc1df909a30861e9b2d3a9f7d64a77b # timestamp: 2011-05-16 19:49:58 +0530 # base_revision_id: vinay.fisrekar@stripped\ # 9178kabh4c7y6n92 # # Begin bundle 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 --===============0322768538==--