summaryrefslogtreecommitdiff
path: root/server-tools
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2005-10-28 13:51:42 +0200
committerunknown <msvensson@neptunus.(none)>2005-10-28 13:51:42 +0200
commit3eaaa154661a7dd19352abf9a2b4e2d62bfaeff7 (patch)
treedc2cf69e29f6233864bfc1739f0b234d87d4d929 /server-tools
parent92f698f9f0eeac0d95442248e1581370493201b5 (diff)
parent2223402426c0157e97ba077fc89dc09baf0175d9 (diff)
downloadmariadb-git-3eaaa154661a7dd19352abf9a2b4e2d62bfaeff7.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into neptunus.(none):/home/msvensson/mysql/mysql-5.0
Diffstat (limited to 'server-tools')
-rw-r--r--server-tools/instance-manager/listener.cc9
-rw-r--r--server-tools/instance-manager/manager.cc12
-rw-r--r--server-tools/instance-manager/priv.cc35
-rw-r--r--server-tools/instance-manager/priv.h4
4 files changed, 50 insertions, 10 deletions
diff --git a/server-tools/instance-manager/listener.cc b/server-tools/instance-manager/listener.cc
index 7cbf72050d8..67d798a1700 100644
--- a/server-tools/instance-manager/listener.cc
+++ b/server-tools/instance-manager/listener.cc
@@ -127,7 +127,7 @@ void Listener_thread::run()
fd_set read_fds_arg= read_fds;
/*
We should reintialize timer as on linux it is modified
- to reflect amout of time not slept.
+ to reflect amount of time not slept.
*/
tv.tv_sec= 0;
tv.tv_usec= 100000;
@@ -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