diff options
author | unknown <serg@serg.mylan> | 2005-10-08 16:59:41 +0200 |
---|---|---|
committer | unknown <serg@serg.mylan> | 2005-10-08 16:59:41 +0200 |
commit | eb4da9fda7466de43bc6730950fbe27b442ac474 (patch) | |
tree | d5db6d4dd011c049aeb0cfea2b3146642da2d4f0 | |
parent | 63e7824fc2cb5fec43cafbc59d17e5cfcc2195b3 (diff) | |
parent | 3a97babbc28178038448819a5d6f3da9ef8731c3 (diff) | |
download | mariadb-git-eb4da9fda7466de43bc6730950fbe27b442ac474.tar.gz |
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into serg.mylan:/usr/home/serg/Abk/mysql-5.0
server-tools/instance-manager/mysql_connection.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
29 files changed, 79 insertions, 98 deletions
diff --git a/VC++Files/test1/mysql_thr.c b/VC++Files/test1/mysql_thr.c index c2743cb8e4c..de1d936806e 100644 --- a/VC++Files/test1/mysql_thr.c +++ b/VC++Files/test1/mysql_thr.c @@ -33,7 +33,7 @@ typedef CRITICAL_SECTION pthread_mutex_t; #define pthread_mutex_lock(A) (EnterCriticalSection(A),0)
#define pthread_mutex_unlock(A) LeaveCriticalSection(A)
#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
-#define pthread_handler_decl(A,B) unsigned __cdecl A(void *B)
+#define pthread_handler_t unsigned __cdecl * typedef unsigned (__cdecl *pthread_handler)(void *);
#define pthread_self() GetCurrentThread()
@@ -155,7 +155,7 @@ int _my_errno(void) ** The test program
*****************************************************************************/
-pthread_handler_decl(test_thread,arg)
+pthread_handler_t test_thread(void *arg) {
MYSQL mysql;
MYSQL_RES *res;
diff --git a/VC++Files/thr_test/thr_test.c b/VC++Files/thr_test/thr_test.c index 3427eed8441..100fcb9c45e 100644 --- a/VC++Files/thr_test/thr_test.c +++ b/VC++Files/thr_test/thr_test.c @@ -44,7 +44,7 @@ typedef CRITICAL_SECTION pthread_mutex_t; #define pthread_mutex_lock(A) (EnterCriticalSection(A),0) #define pthread_mutex_unlock(A) LeaveCriticalSection(A) #define pthread_mutex_destroy(A) DeleteCriticalSection(A) -#define pthread_handler_decl(A,B) unsigned __cdecl A(void *B) +#define pthread_handler_t unsigned __cdecl * typedef unsigned (__cdecl *pthread_handler)(void *); #define pthread_self() GetCurrentThread() @@ -174,7 +174,7 @@ int _my_errno(void) ** The test program *****************************************************************************/ -pthread_handler_decl(test_thread,arg) +pthread_handler_t test_thread(void *arg) { pthread_mutex_lock(&LOCK_thread_count); thread_count--; diff --git a/include/my_pthread.h b/include/my_pthread.h index 057b71356db..1dd1ead7dfa 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -25,7 +25,10 @@ #endif #ifdef __cplusplus +#define EXTERN_C extern "C" extern "C" { +#else +#define EXTERN_C #endif /* __cplusplus */ #if defined(__WIN__) || defined(OS2) @@ -77,10 +80,10 @@ struct timespec { /* For pthread_cond_timedwait() */ typedef int pthread_mutexattr_t; #define win_pthread_self my_thread_var->pthread_self #ifdef OS2 -#define pthread_handler_decl(A,B) void * _Optlink A(void *B) +#define pthread_handler_t EXTERN_C void * _Optlink typedef void * (_Optlink *pthread_handler)(void *); #else -#define pthread_handler_decl(A,B) void * __cdecl A(void *B) +#define pthread_handler_t EXTERN_C void * __cdecl typedef void * (__cdecl *pthread_handler)(void *); #endif @@ -184,7 +187,7 @@ typedef int pthread_attr_t; /* Needed by Unixware 7.0.0 */ #define pthread_key_create(A,B) thr_keycreate((A),(B)) #define pthread_key_delete(A) thr_keydelete(A) -#define pthread_handler_decl(A,B) void *A(void *B) +#define pthread_handler_t EXTERN_C void * #define pthread_key(T,V) pthread_key_t V void * my_pthread_getspecific_imp(pthread_key_t key); @@ -262,7 +265,7 @@ extern int my_pthread_getprio(pthread_t thread_id); #define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) #define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) #define pthread_detach_this_thread() -#define pthread_handler_decl(A,B) void *A(void *B) +#define pthread_handler_t EXTERN_C void * typedef void *(* pthread_handler)(void *); /* Test first for RTS or FSU threads */ diff --git a/myisam/myisamdef.h b/myisam/myisamdef.h index 87a1b757d88..36328c9d9f1 100644 --- a/myisam/myisamdef.h +++ b/myisam/myisamdef.h @@ -728,7 +728,7 @@ int flush_pending_blocks(MI_SORT_PARAM *param); int sort_ft_buf_flush(MI_SORT_PARAM *sort_param); int thr_write_keys(MI_SORT_PARAM *sort_param); #ifdef THREAD -pthread_handler_decl(thr_find_all_keys,arg); +pthread_handler_t thr_find_all_keys(void *arg); #endif int flush_blocks(MI_CHECK *param, KEY_CACHE *key_cache, File file); diff --git a/myisam/sort.c b/myisam/sort.c index fabd713ef45..6c718a0d453 100644 --- a/myisam/sort.c +++ b/myisam/sort.c @@ -307,7 +307,7 @@ static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, uint keys, #ifdef THREAD /* Search after all keys and place them in a temp. file */ -pthread_handler_decl(thr_find_all_keys,arg) +pthread_handler_t thr_find_all_keys(void *arg) { MI_SORT_PARAM *info= (MI_SORT_PARAM*) arg; int error; diff --git a/mysql-test/r/rpl_flush_tables.result b/mysql-test/r/rpl_flush_tables.result index ca2e77cac66..667530c4071 100644 --- a/mysql-test/r/rpl_flush_tables.result +++ b/mysql-test/r/rpl_flush_tables.result @@ -38,3 +38,9 @@ master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1 master-bin.000001 # Query 1 # use `test`; flush tables select * from t3; a +stop slave; +drop table t1; +flush tables with read lock; +start slave; +stop slave; +ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction diff --git a/mysql-test/t/rpl_flush_tables.test b/mysql-test/t/rpl_flush_tables.test index 4411d6ea1c9..92aef9c85d0 100644 --- a/mysql-test/t/rpl_flush_tables.test +++ b/mysql-test/t/rpl_flush_tables.test @@ -39,5 +39,15 @@ select * from t3; # Note that all this confusion may cause warnings 'table xx is open on rename' # in the .err files; these are not fatal and are not reported by mysql-test-run. +stop slave; +connection master; +drop table t1; +connection slave; +flush tables with read lock; +start slave; +sleep 1; +--error 1192 +stop slave; + # End of 4.1 tests # Adding comment for force manual merge 5.0 -> wl1012. Delete me if needed. diff --git a/mysys/my_os2thread.c b/mysys/my_os2thread.c index 0696f480a91..785ff07954d 100644 --- a/mysys/my_os2thread.c +++ b/mysys/my_os2thread.c @@ -51,7 +51,7 @@ void win_pthread_init(void) ** in the new thread. */ -static pthread_handler_decl(pthread_start,param) +pthread_handler_t pthread_start(void *param) { DBUG_ENTER("pthread_start"); pthread_handler func=((struct pthread_map *) param)->func; diff --git a/mysys/my_winthread.c b/mysys/my_winthread.c index eebc07df180..8aaf3b1e31c 100644 --- a/mysys/my_winthread.c +++ b/mysys/my_winthread.c @@ -51,7 +51,7 @@ void win_pthread_init(void) ** in the new thread. */ -static pthread_handler_decl(pthread_start,param) +pthread_handler_t pthread_start(void *param) { pthread_handler func=((struct pthread_map *) param)->func; void *func_param=((struct pthread_map *) param)->param; diff --git a/ndb/src/ndbapi/ndb_cluster_connection.cpp b/ndb/src/ndbapi/ndb_cluster_connection.cpp index 7625da609b0..34079c3e35f 100644 --- a/ndb/src/ndbapi/ndb_cluster_connection.cpp +++ b/ndb/src/ndbapi/ndb_cluster_connection.cpp @@ -86,7 +86,7 @@ const char *Ndb_cluster_connection::get_connectstring(char *buf, return 0; } -extern "C" pthread_handler_decl(run_ndb_cluster_connection_connect_thread, me) +pthread_handler_t run_ndb_cluster_connection_connect_thread(void *me) { g_run_connect_thread= 1; ((Ndb_cluster_connection_impl*) me)->connect_thread(); diff --git a/server-tools/instance-manager/guardian.cc b/server-tools/instance-manager/guardian.cc index a4c0cef41b3..291b685ef1b 100644 --- a/server-tools/instance-manager/guardian.cc +++ b/server-tools/instance-manager/guardian.cc @@ -33,18 +33,13 @@ -C_MODE_START - -pthread_handler_decl(guardian, arg) +pthread_handler_t guardian(void *arg) { Guardian_thread *guardian_thread= (Guardian_thread *) arg; guardian_thread->run(); return 0; } -C_MODE_END - - Guardian_thread::Guardian_thread(Thread_registry &thread_registry_arg, Instance_map *instance_map_arg, uint monitoring_interval_arg) : diff --git a/server-tools/instance-manager/guardian.h b/server-tools/instance-manager/guardian.h index 16180e72dc9..16b4c373c91 100644 --- a/server-tools/instance-manager/guardian.h +++ b/server-tools/instance-manager/guardian.h @@ -31,11 +31,7 @@ class Instance_map; class Thread_registry; struct GUARD_NODE; -C_MODE_START - -pthread_handler_decl(guardian, arg); - -C_MODE_END +pthread_handler_t guardian(void *arg); struct Guardian_thread_args { diff --git a/server-tools/instance-manager/instance.cc b/server-tools/instance-manager/instance.cc index 0c3c1aee5b4..ff3387334b6 100644 --- a/server-tools/instance-manager/instance.cc +++ b/server-tools/instance-manager/instance.cc @@ -43,8 +43,6 @@ typedef pid_t My_process_info; typedef PROCESS_INFORMATION My_process_info; #endif -C_MODE_START - /* Proxy thread is a simple way to avoid all pitfalls of the threads implementation in the OS (e.g. LinuxThreads). With such a thread we @@ -52,7 +50,7 @@ C_MODE_START to do it in a portable way. */ -pthread_handler_decl(proxy, arg) +pthread_handler_t proxy(void *arg) { Instance *instance= (Instance *) arg; start_and_monitor_instance(&instance->options, @@ -60,9 +58,6 @@ pthread_handler_decl(proxy, arg) return 0; } -C_MODE_END - - /* Wait for an instance diff --git a/server-tools/instance-manager/listener.cc b/server-tools/instance-manager/listener.cc index a1c1a743c24..08c28dc9f7d 100644 --- a/server-tools/instance-manager/listener.cc +++ b/server-tools/instance-manager/listener.cc @@ -372,10 +372,7 @@ void Listener_thread::handle_new_mysql_connection(Vio *vio) } -C_MODE_START - - -pthread_handler_decl(listener, arg) +pthread_handler_t listener(void *arg) { Listener_thread_args *args= (Listener_thread_args *) arg; Listener_thread listener(*args); @@ -387,6 +384,3 @@ pthread_handler_decl(listener, arg) return 0; } - -C_MODE_END - diff --git a/server-tools/instance-manager/listener.h b/server-tools/instance-manager/listener.h index 3f5a80f1f53..e0ab5b8ef2b 100644 --- a/server-tools/instance-manager/listener.h +++ b/server-tools/instance-manager/listener.h @@ -24,11 +24,7 @@ #include <my_pthread.h> -C_MODE_START - -pthread_handler_decl(listener, arg); - -C_MODE_END +pthread_handler_t listener(void *arg); class Thread_registry; struct Options; diff --git a/server-tools/instance-manager/mysql_connection.cc b/server-tools/instance-manager/mysql_connection.cc index f3c21f7da27..bf39c843f0a 100644 --- a/server-tools/instance-manager/mysql_connection.cc +++ b/server-tools/instance-manager/mysql_connection.cc @@ -364,9 +364,7 @@ int Mysql_connection_thread::dispatch_command(enum enum_server_command command, } -C_MODE_START - -pthread_handler_decl(mysql_connection, arg) +pthread_handler_t mysql_connection(void *arg) { Mysql_connection_thread_args *args= (Mysql_connection_thread_args *) arg; Mysql_connection_thread mysql_connection_thread(*args); @@ -381,9 +379,6 @@ pthread_handler_decl(mysql_connection, arg) return 0; } -C_MODE_END - - /* vim: fdm=marker */ diff --git a/server-tools/instance-manager/mysql_connection.h b/server-tools/instance-manager/mysql_connection.h index 2ff55d81e57..492937b2198 100644 --- a/server-tools/instance-manager/mysql_connection.h +++ b/server-tools/instance-manager/mysql_connection.h @@ -24,12 +24,7 @@ #include <my_pthread.h> -C_MODE_START - -pthread_handler_decl(mysql_connection, arg); - -C_MODE_END - +pthread_handler_t mysql_connection(void *arg); class Thread_registry; class User_map; diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 6f2c7670b88..7fe6d019fb5 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -121,7 +121,7 @@ static int ndb_get_table_statistics(Ndb*, const char *, static pthread_t ndb_util_thread; pthread_mutex_t LOCK_ndb_util_thread; pthread_cond_t COND_ndb_util_thread; -extern "C" pthread_handler_decl(ndb_util_thread_func, arg); +pthread_handler_t ndb_util_thread_func(void *arg); ulong ndb_cache_check_time; /* @@ -5926,8 +5926,7 @@ ha_ndbcluster::update_table_comment( // Utility thread main loop -extern "C" pthread_handler_decl(ndb_util_thread_func, - arg __attribute__((unused))) +pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) { THD *thd; /* needs to be first for thread_stack */ Ndb* ndb; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index c80e457d2bb..19ebceab719 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -610,8 +610,8 @@ bool multi_delete_set_locks_and_link_aux_tables(LEX *lex); void init_max_user_conn(void); void init_update_queries(void); void free_max_user_conn(void); -extern "C" pthread_handler_decl(handle_one_connection,arg); -extern "C" pthread_handler_decl(handle_bootstrap,arg); +pthread_handler_t handle_one_connection(void *arg); +pthread_handler_t handle_bootstrap(void *arg); void end_thread(THD *thd,bool put_in_cache); void flush_thread_cache(); bool mysql_execute_command(THD *thd); @@ -1035,7 +1035,7 @@ int write_record(THD *thd, TABLE *table, COPY_INFO *info); extern ulong volatile manager_status; extern bool volatile manager_thread_in_use, mqh_used; extern pthread_t manager_thread; -extern "C" pthread_handler_decl(handle_manager, arg); +pthread_handler_t handle_manager(void *arg); /* sql_test.cc */ #ifndef DBUG_OFF diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 904b5ec78be..3c708bb8a1a 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -587,25 +587,25 @@ struct st_VioSSLAcceptorFd *ssl_acceptor_fd; /* Function declarations */ static void start_signal_handler(void); -static pthread_handler_decl(signal_hand, arg); +pthread_handler_t signal_hand(void *arg); static void mysql_init_variables(void); static void get_options(int argc,char **argv); static void set_server_version(void); static int init_thread_environment(); static char *get_relative_path(const char *path); static void fix_paths(void); -extern "C" pthread_handler_decl(handle_connections_sockets,arg); -extern "C" pthread_handler_decl(kill_server_thread,arg); +pthread_handler_t handle_connections_sockets(void *arg); +pthread_handler_t kill_server_thread(void *arg); static void bootstrap(FILE *file); static void close_server_sock(); static bool read_init_file(char *file_name); #ifdef __NT__ -extern "C" pthread_handler_decl(handle_connections_namedpipes,arg); +pthread_handler_t handle_connections_namedpipes(void *arg); #endif #ifdef HAVE_SMEM -static pthread_handler_decl(handle_connections_shared_memory,arg); +pthread_handler_t handle_connections_shared_memory(void *arg); #endif -extern "C" pthread_handler_decl(handle_slave,arg); +pthread_handler_t handle_slave(void *arg); static ulong find_bit_type(const char *x, TYPELIB *bit_lib); static void clean_up(bool print_message); static void clean_up_mutexes(void); @@ -954,7 +954,7 @@ static void __cdecl kill_server(int sig_ptr) #if defined(USE_ONE_SIGNAL_HAND) || (defined(__NETWARE__) && defined(SIGNALS_DONT_BREAK_READ)) -extern "C" pthread_handler_decl(kill_server_thread,arg __attribute__((unused))) +pthread_handler_t kill_server_thread(void *arg __attribute__((unused))) { my_thread_init(); // Initialize new thread kill_server(0); @@ -2388,7 +2388,7 @@ int uname(struct utsname *a) } -extern "C" pthread_handler_decl(handle_shutdown,arg) +pthread_handler_t handle_shutdown(void *arg) { MSG msg; my_thread_init(); @@ -2417,7 +2417,7 @@ int STDCALL handle_kill(ulong ctrl_type) #ifdef OS2 -extern "C" pthread_handler_decl(handle_shutdown,arg) +pthread_handler_t handle_shutdown(void *arg) { my_thread_init(); @@ -3731,8 +3731,7 @@ inline void kill_broken_server() /* Handle new connections and spawn new process to handle them */ #ifndef EMBEDDED_LIBRARY -extern "C" pthread_handler_decl(handle_connections_sockets, - arg __attribute__((unused))) +pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused))) { my_socket sock,new_sock; uint error_count=0; @@ -3946,7 +3945,7 @@ extern "C" pthread_handler_decl(handle_connections_sockets, #ifdef __NT__ -extern "C" pthread_handler_decl(handle_connections_namedpipes,arg) +pthread_handler_t handle_connections_namedpipes(void *arg) { HANDLE hConnectedPipe; BOOL fConnected; @@ -4032,17 +4031,16 @@ extern "C" pthread_handler_decl(handle_connections_namedpipes,arg) Thread of shared memory's service SYNOPSIS - pthread_handler_decl() - handle_connections_shared_memory Thread handle + handle_connections_shared_memory() arg Arguments of thread */ #ifdef HAVE_SMEM -pthread_handler_decl(handle_connections_shared_memory,arg) +pthread_handler_t handle_connections_shared_memory(void *arg) { /* file-mapping object, use for create shared memory */ HANDLE handle_connect_file_map= 0; - char *handle_connect_map= 0; // pointer on shared memory + char *handle_connect_map= 0; // pointer on shared memory HANDLE event_connect_answer= 0; ulong smem_buffer_length= shared_memory_buffer_length + 4; ulong connect_number= 1; diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index d4d26c2ccf1..792251e82c0 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -578,7 +578,7 @@ int find_recovery_captain(THD* thd, MYSQL* mysql) } -pthread_handler_decl(handle_failsafe_rpl,arg) +pthread_handler_t handle_failsafe_rpl(void *arg) { DBUG_ENTER("handle_failsafe_rpl"); THD *thd = new THD; diff --git a/sql/repl_failsafe.h b/sql/repl_failsafe.h index dfaacf557e8..19849e63af9 100644 --- a/sql/repl_failsafe.h +++ b/sql/repl_failsafe.h @@ -31,7 +31,7 @@ extern pthread_cond_t COND_rpl_status; extern TYPELIB rpl_role_typelib, rpl_status_typelib; extern const char* rpl_role_type[], *rpl_status_type[]; -pthread_handler_decl(handle_failsafe_rpl,arg); +pthread_handler_t handle_failsafe_rpl(void *arg); void change_rpl_status(RPL_STATUS from_status, RPL_STATUS to_status); int find_recovery_captain(THD* thd, MYSQL* mysql); int update_slave_list(MYSQL* mysql, MASTER_INFO* mi); diff --git a/sql/slave.cc b/sql/slave.cc index b1763187d04..0e810b798f9 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -3325,7 +3325,7 @@ on this slave.\ /* Slave I/O Thread entry point */ -extern "C" pthread_handler_decl(handle_slave_io,arg) +pthread_handler_t handle_slave_io(void *arg) { THD *thd; // needs to be first for thread_stack MYSQL *mysql; @@ -3634,7 +3634,7 @@ err: #ifndef DBUG_OFF if (abort_slave_event_count && !events_till_abort) goto slave_begin; -#endif +#endif my_thread_end(); pthread_exit(0); DBUG_RETURN(0); // Can't return anything here @@ -3643,11 +3643,11 @@ err: /* Slave SQL Thread entry point */ -extern "C" pthread_handler_decl(handle_slave_sql,arg) +pthread_handler_t handle_slave_sql(void *arg) { THD *thd; /* needs to be first for thread_stack */ char llbuff[22],llbuff1[22]; - RELAY_LOG_INFO* rli = &((MASTER_INFO*)arg)->rli; + RELAY_LOG_INFO* rli = &((MASTER_INFO*)arg)->rli; const char *errmsg; // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff @@ -3655,7 +3655,7 @@ extern "C" pthread_handler_decl(handle_slave_sql,arg) DBUG_ENTER("handle_slave_sql"); #ifndef DBUG_OFF -slave_begin: +slave_begin: #endif DBUG_ASSERT(rli->inited); diff --git a/sql/slave.h b/sql/slave.h index f8e784bfd17..cbb885ea48b 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -572,8 +572,8 @@ void set_slave_thread_options(THD* thd); void set_slave_thread_default_charset(THD* thd, RELAY_LOG_INFO *rli); void rotate_relay_log(MASTER_INFO* mi); -extern "C" pthread_handler_decl(handle_slave_io,arg); -extern "C" pthread_handler_decl(handle_slave_sql,arg); +pthread_handler_t handle_slave_io(void *arg); +pthread_handler_t handle_slave_sql(void *arg); extern bool volatile abort_loop; extern MASTER_INFO main_mi, *active_mi; /* active_mi for multi-master */ extern LIST master_list; diff --git a/sql/sql_class.h b/sql/sql_class.h index 7cbfc19123f..48a2837eb04 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1146,8 +1146,8 @@ public: thread is (and must remain, for now) the only responsible for freeing these 3 members. If you add members here, and you add code to set them in replication, don't forget to free_them_and_set_them_to_0 in replication - properly. For details see the 'err:' label of the pthread_handler_decl of - the slave SQL thread, in sql/slave.cc. + properly. For details see the 'err:' label of the handle_slave_sql() + in sql/slave.cc. */ char *db, *catalog; Security_context main_security_ctx; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index cc4b291b5d1..91af68cf37a 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -28,7 +28,7 @@ static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list); static int write_delayed(THD *thd,TABLE *table, enum_duplicates dup, bool ignore, char *query, uint query_length, bool log_on); static void end_delayed_insert(THD *thd); -extern "C" pthread_handler_decl(handle_delayed_insert,arg); +pthread_handler_t handle_delayed_insert(void *arg); static void unlink_blobs(register TABLE *table); #endif static bool check_view_insertability(THD *thd, TABLE_LIST *view); @@ -1691,7 +1691,7 @@ void kill_delayed_threads(void) * Create a new delayed insert thread */ -extern "C" pthread_handler_decl(handle_delayed_insert,arg) +pthread_handler_t handle_delayed_insert(void *arg) { delayed_insert *di=(delayed_insert*) arg; THD *thd= &di->thd; diff --git a/sql/sql_manager.cc b/sql/sql_manager.cc index 0af6a80d4c2..34334d3a01d 100644 --- a/sql/sql_manager.cc +++ b/sql/sql_manager.cc @@ -32,7 +32,7 @@ pthread_t manager_thread; pthread_mutex_t LOCK_manager; pthread_cond_t COND_manager; -extern "C" pthread_handler_decl(handle_manager,arg __attribute__((unused))) +pthread_handler_t handle_manager(void *arg __attribute__((unused))) { int error = 0; ulong status; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index b70409704a2..8951f6b6d2d 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1046,7 +1046,7 @@ void execute_init_command(THD *thd, sys_var_str *init_command_var, } -pthread_handler_decl(handle_one_connection,arg) +pthread_handler_t handle_one_connection(void *arg) { THD *thd=(THD*) arg; uint launch_time = @@ -1182,7 +1182,7 @@ end_thread: Used when creating the initial grant tables */ -extern "C" pthread_handler_decl(handle_bootstrap,arg) +pthread_handler_t handle_bootstrap(void *arg) { THD *thd=(THD*) arg; FILE *file=bootstrap_file; @@ -2944,7 +2944,7 @@ end_with_restore_list: To prevent that, refuse SLAVE STOP if the client thread has locked tables */ - if (thd->locked_tables || thd->active_transaction()) + if (thd->locked_tables || thd->active_transaction() || thd->global_read_lock) { my_message(ER_LOCK_OR_ACTIVE_TRANSACTION, ER(ER_LOCK_OR_ACTIVE_TRANSACTION), MYF(0)); diff --git a/tools/mysqlmanager.c b/tools/mysqlmanager.c index 4a5c08be50a..4d507fc3d32 100644 --- a/tools/mysqlmanager.c +++ b/tools/mysqlmanager.c @@ -332,8 +332,8 @@ static int client_msg_raw(NET* net,int err_code,int pre,const char* fmt, static int authenticate(struct manager_thd* thd); /* returns pointer to end of line */ static char* read_line(struct manager_thd* thd); -static pthread_handler_decl(process_connection, arg); -static pthread_handler_decl(process_launcher_messages, arg); +pthread_handler_t process_connection(void *arg); +pthread_handler_t process_launcher_messages(void *arg); static int exec_line(struct manager_thd* thd,char* buf,char* buf_end); #ifdef DO_STACKTRACE @@ -1089,8 +1089,7 @@ static void log_msg(const char* fmt, int msg_type, va_list args) pthread_mutex_unlock(&lock_log); } -static pthread_handler_decl(process_launcher_messages, - args __attribute__((unused))) +pthread_handler_t process_launcher_messages(void *arg __attribute__((unused))) { my_thread_init(); for (;!in_shutdown;) @@ -1146,7 +1145,7 @@ static pthread_handler_decl(process_launcher_messages, return 0; } -static pthread_handler_decl(process_connection,arg) +pthread_handler_t process_connection(void *arg) { struct manager_thd* thd = (struct manager_thd*)arg; my_thread_init(); |