mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
IM port fixes: fix crash on startup, add more error checking, get rid of unnecessary code.
This commit is contained in:
@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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:
|
|||||||
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()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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:
|
|||||||
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:
|
|||||||
~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:
|
|||||||
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()
|
|||||||
|
|
||||||
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)
|
|||||||
#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)
|
|||||||
|
|
||||||
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 @@
|
|||||||
|
|
||||||
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)
|
|||||||
*/
|
*/
|
||||||
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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user