Commit 85834c3b authored by unknown's avatar unknown

IM port fixes: fix crash on startup, add more error checking, get rid of unnecessary code.


server-tools/instance-manager/commands.cc:
  fix memory leak
server-tools/instance-manager/guardian.cc:
  don't check pthread_mutex_lock/unlock return value, as it never returns error if properly
  used (no self deadlocks) and initialized
server-tools/instance-manager/guardian.h:
  prototype fixed
server-tools/instance-manager/instance_map.cc:
  don't check pthread_mutex_lock/unlock status, as it never returns error if
  properly used (no self deadlocks) and initialized
server-tools/instance-manager/instance_map.h:
  prototype fixed
server-tools/instance-manager/listener.cc:
  initialize highest-numbered descriptor to 0 for select before setting it with max(n, sockets[i]),
  ifdef unix-specific code
server-tools/instance-manager/manager.cc:
  remove commented stuff
server-tools/instance-manager/options.cc:
  fix crash in load_defaults, which happened on all Unix systems due to
  const char *Options::config_file= NULL. Check return value for GetModuleFileName.
  Get rid of obscure default_config_file[FN_REFLEN]= "/etc/my.cnf"; which was never used
parent c5bcb9f0
...@@ -471,6 +471,7 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id) ...@@ -471,6 +471,7 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id)
int read_len; int read_len;
/* calculate buffer size */ /* calculate buffer size */
MY_STAT file_stat; MY_STAT file_stat;
Buffer read_buff;
/* my_fstat doesn't use the flag parameter */ /* my_fstat doesn't use the flag parameter */
if (my_fstat(fd, &file_stat, MYF(0))) if (my_fstat(fd, &file_stat, MYF(0)))
...@@ -478,13 +479,16 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id) ...@@ -478,13 +479,16 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id)
buff_size= (size - offset); buff_size= (size - offset);
read_buff.reserve(0, buff_size);
/* read in one chunk */ /* read in one chunk */
read_len= my_seek(fd, file_stat.st_size - size, MY_SEEK_SET, MYF(0)); read_len= my_seek(fd, file_stat.st_size - size, MY_SEEK_SET, MYF(0));
char *bf= (char*) malloc(sizeof(char)*buff_size); if ((read_len= my_read(fd, (byte*) read_buff.buffer,
if ((read_len= my_read(fd, (byte*)bf, buff_size, MYF(0))) < 0) buff_size, MYF(0))) < 0)
return ER_READ_FILE; return ER_READ_FILE;
store_to_protocol_packet(&send_buff, (char*) bf, &position, read_len); store_to_protocol_packet(&send_buff, read_buff.buffer,
&position, read_len);
close(fd); close(fd);
} }
else else
......
...@@ -424,23 +424,13 @@ int Guardian_thread::stop_instances(bool stop_instances_arg) ...@@ -424,23 +424,13 @@ int Guardian_thread::stop_instances(bool stop_instances_arg)
} }
int Guardian_thread::lock() void Guardian_thread::lock()
{ {
#ifdef __WIN__
pthread_mutex_lock(&LOCK_guardian); pthread_mutex_lock(&LOCK_guardian);
return 0;
#else
return pthread_mutex_lock(&LOCK_guardian);
#endif
} }
int Guardian_thread::unlock() void Guardian_thread::unlock()
{ {
#ifdef __WIN__
pthread_mutex_unlock(&LOCK_guardian); pthread_mutex_unlock(&LOCK_guardian);
return 0;
#else
return pthread_mutex_unlock(&LOCK_guardian);
#endif
} }
...@@ -100,8 +100,8 @@ public: ...@@ -100,8 +100,8 @@ public:
int stop_guard(Instance *instance); int stop_guard(Instance *instance);
/* Returns true if guardian thread is stopped */ /* Returns true if guardian thread is stopped */
int is_stopped(); int is_stopped();
int lock(); void lock();
int unlock(); void unlock();
public: public:
pthread_cond_t COND_guardian; pthread_cond_t COND_guardian;
......
...@@ -137,25 +137,15 @@ Instance_map::~Instance_map() ...@@ -137,25 +137,15 @@ Instance_map::~Instance_map()
} }
int Instance_map::lock() void Instance_map::lock()
{ {
#ifdef __WIN__
pthread_mutex_lock(&LOCK_instance_map); pthread_mutex_lock(&LOCK_instance_map);
return 0;
#else
return pthread_mutex_lock(&LOCK_instance_map);
#endif
} }
int Instance_map::unlock() void Instance_map::unlock()
{ {
#ifdef __WIN__
pthread_mutex_unlock(&LOCK_instance_map); pthread_mutex_unlock(&LOCK_instance_map);
return 0;
#else
return pthread_mutex_unlock(&LOCK_instance_map);
#endif
} }
......
...@@ -60,8 +60,8 @@ public: ...@@ -60,8 +60,8 @@ public:
Instance *find(const char *name, uint name_len); Instance *find(const char *name, uint name_len);
int flush_instances(); int flush_instances();
int lock(); void lock();
int unlock(); void unlock();
int init(); int init();
Instance_map(const char *default_mysqld_path_arg); Instance_map(const char *default_mysqld_path_arg);
......
...@@ -47,6 +47,7 @@ public: ...@@ -47,6 +47,7 @@ public:
~Listener_thread(); ~Listener_thread();
void run(); void run();
private: private:
static const int LISTEN_BACK_LOG_SIZE= 5; /* standard backlog size */
ulong total_connection_count; ulong total_connection_count;
Thread_info thread_info; Thread_info thread_info;
...@@ -59,7 +60,6 @@ private: ...@@ -59,7 +60,6 @@ private:
int create_unix_socket(struct sockaddr_un &unix_socket_address); int create_unix_socket(struct sockaddr_un &unix_socket_address);
}; };
const int LISTEN_BACK_LOG_SIZE= 5; // standard backlog size
Listener_thread::Listener_thread(const Listener_thread_args &args) : Listener_thread::Listener_thread(const Listener_thread_args &args) :
Listener_thread_args(args.thread_registry, args.options, args.user_map, Listener_thread_args(args.thread_registry, args.options, args.user_map,
...@@ -88,13 +88,14 @@ Listener_thread::~Listener_thread() ...@@ -88,13 +88,14 @@ Listener_thread::~Listener_thread()
void Listener_thread::run() void Listener_thread::run()
{ {
int n= 0;
#ifndef __WIN__
/* we use this var to check whether we are running on LinuxThreads */ /* we use this var to check whether we are running on LinuxThreads */
pid_t thread_pid; pid_t thread_pid;
int n;
thread_pid= getpid(); thread_pid= getpid();
#ifndef __WIN__
struct sockaddr_un unix_socket_address; struct sockaddr_un unix_socket_address;
/* set global variable */ /* set global variable */
linuxthreads= (thread_pid != manager_pid); linuxthreads= (thread_pid != manager_pid);
...@@ -205,7 +206,6 @@ void set_no_inherit(int socket) ...@@ -205,7 +206,6 @@ void set_no_inherit(int socket)
#ifndef __WIN__ #ifndef __WIN__
int flags= fcntl(socket, F_GETFD, 0); int flags= fcntl(socket, F_GETFD, 0);
fcntl(socket, F_SETFD, flags | FD_CLOEXEC); fcntl(socket, F_SETFD, flags | FD_CLOEXEC);
#else
#endif #endif
} }
......
...@@ -97,7 +97,6 @@ void set_signals(sigset_t *set) ...@@ -97,7 +97,6 @@ void set_signals(sigset_t *set)
int my_sigwait(const sigset_t *set, int *sig) int my_sigwait(const sigset_t *set, int *sig)
{ {
// MSG msg;
while (!have_signal) while (!have_signal)
{ {
Sleep(100); Sleep(100);
......
...@@ -32,17 +32,16 @@ ...@@ -32,17 +32,16 @@
const char *default_password_file_name= QUOTE(DEFAULT_PASSWORD_FILE_NAME); const char *default_password_file_name= QUOTE(DEFAULT_PASSWORD_FILE_NAME);
const char *default_log_file_name= QUOTE(DEFAULT_LOG_FILE_NAME); const char *default_log_file_name= QUOTE(DEFAULT_LOG_FILE_NAME);
char default_config_file[FN_REFLEN]= "/etc/my.cnf"; #ifdef __WIN__
char windows_config_file[FN_REFLEN];
#ifndef __WIN__
char Options::run_as_service;
const char *Options::user= 0; /* No default value */
const char *Options::config_file= NULL;
#else
char Options::install_as_service; char Options::install_as_service;
char Options::remove_service; char Options::remove_service;
const char *Options::config_file= QUOTE(DEFAULT_CONFIG_FILE); #else
char Options::run_as_service;
const char *Options::user= 0; /* No default value */
#endif #endif
const char *Options::config_file= QUOTE(DEFAULT_CONFIG_FILE);
const char *Options::log_file_name= default_log_file_name; const char *Options::log_file_name= default_log_file_name;
const char *Options::pid_file_name= QUOTE(DEFAULT_PID_FILE_NAME); const char *Options::pid_file_name= QUOTE(DEFAULT_PID_FILE_NAME);
const char *Options::socket_file_name= QUOTE(DEFAULT_SOCKET_FILE_NAME); const char *Options::socket_file_name= QUOTE(DEFAULT_SOCKET_FILE_NAME);
...@@ -271,9 +270,20 @@ int Options::load(int argc, char **argv) ...@@ -271,9 +270,20 @@ int Options::load(int argc, char **argv)
*/ */
if (Options::config_file == NULL) if (Options::config_file == NULL)
{ {
::GetModuleFileName(NULL, default_config_file, sizeof(default_config_file)); char *filename= strrchr(default_config_file, "\\"); char *filename;
strcpy(filename, "\\my.ini"); static const char default_win_config_file_name[]= "\\my.ini";
Options::config_file= default_config_file;
if (!GetModuleFileName(NULL, windows_config_file,
sizeof(windows_config_file)))
goto err;
filename= strrchr(windows_config_file, "\\");
/*
Don't check for the overflow as strlen("\\my.ini") is less
then strlen("mysqlmanager") (the binary name)
*/
strcpy(filename, default_win_config_file_name);
Options::config_file= windows_config_file;
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment