diff options
author | unknown <petr@mysql.com> | 2005-10-28 14:29:46 +0400 |
---|---|---|
committer | unknown <petr@mysql.com> | 2005-10-28 14:29:46 +0400 |
commit | edba9396e227d8b1220a8d6ae41e08746ddd7548 (patch) | |
tree | 20c0ce926b030d341f89f53b312dac15e2a404cd /server-tools | |
parent | f0cf596ab7ced595928d330d8c2f2b8027a9c71f (diff) | |
download | mariadb-git-edba9396e227d8b1220a8d6ae41e08746ddd7548.tar.gz |
fix Bug #14103 IM tests fail on SCO
server-tools/instance-manager/listener.cc:
every new connection should have sufficient thread stack to
handle all IM commands
server-tools/instance-manager/manager.cc:
change stack size of listener and guardian threads
server-tools/instance-manager/priv.cc:
Add a new function, which is a wrapper around pthread_create to increase the stack size
server-tools/instance-manager/priv.h:
declare new function
Diffstat (limited to 'server-tools')
-rw-r--r-- | server-tools/instance-manager/listener.cc | 7 | ||||
-rw-r--r-- | server-tools/instance-manager/manager.cc | 12 | ||||
-rw-r--r-- | server-tools/instance-manager/priv.cc | 35 | ||||
-rw-r--r-- | server-tools/instance-manager/priv.h | 4 |
4 files changed, 49 insertions, 9 deletions
diff --git a/server-tools/instance-manager/listener.cc b/server-tools/instance-manager/listener.cc index 7cbf72050d8..2f93cf46b57 100644 --- a/server-tools/instance-manager/listener.cc +++ b/server-tools/instance-manager/listener.cc @@ -362,12 +362,13 @@ void Listener_thread::handle_new_mysql_connection(Vio *vio) pthread_attr_t mysql_thd_attr; pthread_attr_init(&mysql_thd_attr); pthread_attr_setdetachstate(&mysql_thd_attr, PTHREAD_CREATE_DETACHED); - if (pthread_create(&mysql_thd_id, &mysql_thd_attr, mysql_connection, - mysql_thread_args)) + if (set_stacksize_n_create_thread(&mysql_thd_id, &mysql_thd_attr, + mysql_connection, mysql_thread_args)) { delete mysql_thread_args; vio_delete(vio); - log_error("handle_one_mysql_connection(): pthread_create(mysql) failed"); + log_error("handle_one_mysql_connection():" + "set_stacksize_n_create_thread(mysql) failed"); } pthread_attr_destroy(&mysql_thd_attr); } diff --git a/server-tools/instance-manager/manager.cc b/server-tools/instance-manager/manager.cc index f5db7c595f0..3ecd5fbc0d0 100644 --- a/server-tools/instance-manager/manager.cc +++ b/server-tools/instance-manager/manager.cc @@ -162,12 +162,12 @@ void manager(const Options &options) pthread_attr_init(&listener_thd_attr); pthread_attr_setdetachstate(&listener_thd_attr, PTHREAD_CREATE_DETACHED); - rc= pthread_create(&listener_thd_id, &listener_thd_attr, listener, - &listener_args); + rc= set_stacksize_n_create_thread(&listener_thd_id, &listener_thd_attr, + listener, &listener_args); pthread_attr_destroy(&listener_thd_attr); if (rc) { - log_error("manager(): pthread_create(listener) failed"); + log_error("manager(): set_stacksize_n_create_thread(listener) failed"); goto err; } @@ -187,12 +187,12 @@ void manager(const Options &options) pthread_attr_init(&guardian_thd_attr); pthread_attr_setdetachstate(&guardian_thd_attr, PTHREAD_CREATE_DETACHED); - rc= pthread_create(&guardian_thd_id, &guardian_thd_attr, guardian, - &guardian_thread); + rc= set_stacksize_n_create_thread(&guardian_thd_id, &guardian_thd_attr, + guardian, &guardian_thread); pthread_attr_destroy(&guardian_thd_attr); if (rc) { - log_error("manager(): pthread_create(guardian) failed"); + log_error("manager(): set_stacksize_n_create_thread(guardian) failed"); goto err; } diff --git a/server-tools/instance-manager/priv.cc b/server-tools/instance-manager/priv.cc index 02a788ec469..cf073d9d7dc 100644 --- a/server-tools/instance-manager/priv.cc +++ b/server-tools/instance-manager/priv.cc @@ -18,6 +18,17 @@ #include "priv.h" #include "portability.h" +#if defined(__ia64__) || defined(__ia64) +/* + We can live with 32K, but reserve 64K. Just to be safe. + On ia64 we need to reserve double of the size. +*/ +#define IM_THREAD_STACK_SIZE (128*1024L) +#else +#define IM_THREAD_STACK_SIZE (64*1024) +#endif + + /* the pid of the manager process (of the signal thread on the LinuxThreads) */ pid_t manager_pid; @@ -52,3 +63,27 @@ unsigned int test_flags= 0; unsigned long bytes_sent = 0L, bytes_received = 0L; unsigned long mysqld_net_retry_count = 10L; unsigned long open_files_limit; + +/* + Change the stack size and start a thread. Return an error if either + pthread_attr_setstacksize or pthread_create fails. + Arguments are the same as for pthread_create(). +*/ + +int set_stacksize_n_create_thread(pthread_t *thread, pthread_attr_t *attr, + void *(*start_routine)(void *), void *arg) +{ + int rc; + + /* + Set stack size to be safe on the platforms with too small + default thread stack. + */ + rc= pthread_attr_setstacksize(attr, + (size_t) (PTHREAD_STACK_MIN + + IM_THREAD_STACK_SIZE)); + + if (!rc) + rc= pthread_create(thread, attr, start_routine, arg); + return rc; +} diff --git a/server-tools/instance-manager/priv.h b/server-tools/instance-manager/priv.h index ce9d54293c7..db6fa2ec143 100644 --- a/server-tools/instance-manager/priv.h +++ b/server-tools/instance-manager/priv.h @@ -80,4 +80,8 @@ extern unsigned long bytes_sent, bytes_received; extern unsigned long mysqld_net_retry_count; extern unsigned long open_files_limit; + +int set_stacksize_n_create_thread(pthread_t *thread, pthread_attr_t *attr, + void *(*start_routine)(void *), void *arg); + #endif // INCLUDES_MYSQL_INSTANCE_MANAGER_PRIV_H |