Merge pull request #2399 from val214/v2.0.9-mem-leaks

[WIP] V2.0.9 mem leaks fixes
pull/2507/head
René Cannaò 6 years ago committed by GitHub
commit e062f84c3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -620,7 +620,6 @@ static void * GTID_syncer_run() {
proxy_error("could not initialise GTID sync loop\n");
exit(EXIT_FAILURE);
}
MyHGM->gtid_ev_async = (struct ev_async *)malloc(sizeof(struct ev_async));
//ev_async_init(gtid_ev_async, gtid_async_cb);
//ev_async_start(gtid_ev_loop, gtid_ev_async);
MyHGM->gtid_ev_timer = (struct ev_timer *)malloc(sizeof(struct ev_timer));
@ -1007,6 +1006,8 @@ MySQL_HostGroups_Manager::MySQL_HostGroups_Manager() {
incoming_aws_aurora_hostgroups = NULL;
pthread_rwlock_init(&gtid_rwlock, NULL);
gtid_missing_nodes = false;
gtid_ev_loop=NULL;
gtid_ev_timer=NULL;
gtid_ev_async = (struct ev_async *)malloc(sizeof(struct ev_async));
{
@ -1040,7 +1041,6 @@ void MySQL_HostGroups_Manager::shutdown() {
ev_async_send(gtid_ev_loop, gtid_ev_async);
GTID_syncer_thread->join();
delete GTID_syncer_thread;
free(gtid_ev_async);
}
MySQL_HostGroups_Manager::~MySQL_HostGroups_Manager() {
@ -1053,6 +1053,13 @@ MySQL_HostGroups_Manager::~MySQL_HostGroups_Manager() {
if (admindb) {
delete admindb;
}
for (auto info : AWS_Aurora_Info_Map)
delete info.second;
free(gtid_ev_async);
if (gtid_ev_loop)
ev_loop_destroy(gtid_ev_loop);
if (gtid_ev_timer)
free(gtid_ev_timer);
#ifdef MHM_PTHREAD_MUTEX
pthread_mutex_destroy(&lock);
#endif

@ -587,6 +587,8 @@ void MySQL_Logger::events_set_base_filename() {
}
void MySQL_Logger::events_set_datadir(char *s) {
if (events.datadir)
free(events.datadir);
events.datadir=strdup(s);
flush_log();
};
@ -615,6 +617,8 @@ void MySQL_Logger::audit_set_base_filename() {
}
void MySQL_Logger::audit_set_datadir(char *s) {
if (audit.datadir)
free(audit.datadir);
audit.datadir=strdup(s);
flush_log();
};

@ -140,15 +140,23 @@ class MonMySrvC {
public:
char *address;
uint16_t port;
PtrArray *conns;
std::unique_ptr<PtrArray> conns;
MonMySrvC(char *a, uint16_t p) {
address = strdup(a);
port = p;
conns = new PtrArray();
conns = std::unique_ptr<PtrArray>(new PtrArray());
};
~MonMySrvC() {
free(address);
delete conns;
if (conns) {
while (conns->len) {
MYSQL* mysql = static_cast<MYSQL*>(conns->index(0));
if (mysql) {
mysql_close(mysql); mysql=NULL;
}
conns->remove_index_fast(0);
}
}
}
};
@ -172,6 +180,17 @@ public:
pthread_mutex_init(&m2, NULL);
#endif // DEBUG
};
~MySQL_Monitor_Connection_Pool() {
if (servers) {
while(servers->len) {
MonMySrvC *srv = static_cast<MonMySrvC *>(servers->index(0));
if (srv) {
delete srv;
}
servers->remove_index_fast(0);
}
}
}
void conn_register(MySQL_Monitor_State_Data *mmsd) {
#ifdef DEBUG
std::lock_guard<std::mutex> lock(mutex);

@ -267,12 +267,18 @@ int MySQL_Listeners_Manager::add(const char *iface, unsigned int num_threads, in
#else
s = ( atoi(port) ? listen_on_port(address, atoi(port), PROXYSQL_LISTEN_LEN) : listen_on_unix(address, PROXYSQL_LISTEN_LEN));
#endif /* SO_REUSEPORT */
if (s==-1) return s;
if (s==-1) {
free(address);
free(port);
return s;
}
if (s>0) {
ioctl_FIONBIO(s,1);
iface_info *ifi=new iface_info((char *)iface, address, atoi(port), s);
ifaces->add(ifi);
}
free(address);
free(port);
return s;
}
@ -3252,7 +3258,8 @@ void MySQL_Threads_Handler::init(unsigned int num, size_t stack) {
assert(rc==0);
mysql_threads=(proxysql_mysql_thread_t *)calloc(num_threads,sizeof(proxysql_mysql_thread_t));
#ifdef IDLE_THREADS
mysql_threads_idles=(proxysql_mysql_thread_t *)calloc(num_threads,sizeof(proxysql_mysql_thread_t));
if (GloVars.global.idle_threads)
mysql_threads_idles=(proxysql_mysql_thread_t *)calloc(num_threads,sizeof(proxysql_mysql_thread_t));
#endif // IDLE_THREADS
}
@ -3264,9 +3271,11 @@ proxysql_mysql_thread_t * MySQL_Threads_Handler::create_thread(unsigned int tn,
}
#ifdef IDLE_THREADS
} else {
if (pthread_create(&mysql_threads_idles[tn].thread_id, &attr, start_routine , &mysql_threads_idles[tn]) != 0) {
proxy_error("Thread creation\n");
assert(0);
if (GloVars.global.idle_threads) {
if (pthread_create(&mysql_threads_idles[tn].thread_id, &attr, start_routine , &mysql_threads_idles[tn]) != 0) {
proxy_error("Thread creation\n");
assert(0);
}
}
#endif // IDLE_THREADS
}
@ -5557,7 +5566,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
thr=(MySQL_Thread *)mysql_threads[i].worker;
#ifdef IDLE_THREADS
} else {
if (mysql_thread___session_idle_show_processlist && mysql_threads_idles) {
if (GloVars.global.idle_threads && mysql_thread___session_idle_show_processlist && mysql_threads_idles) {
thr=(MySQL_Thread *)mysql_threads_idles[i-num_threads].worker;
}
#endif // IDLE_THREADS

@ -5140,6 +5140,7 @@ void ProxySQL_Admin::flush_admin_variables___database_to_runtime(SQLite3DB *db,
sprintf(q,"DELETE FROM global_variables WHERE variable_name=\"admin-%s\"",r->fields[0]);
db->execute(q);
}
free(val);
}
} else {
proxy_debug(PROXY_DEBUG_ADMIN, 4, "Set variable %s with value \"%s\"\n", r->fields[0],r->fields[1]);

@ -65,6 +65,7 @@ int listen_on_port(char *ip, uint16_t port, int backlog, bool reuseport) {
}
}
freeaddrinfo(ai);
// return the socket
return sd;
}

@ -213,6 +213,7 @@ void * main_check_latest_version_thread(void *arg) {
if (latest_version) {
proxy_info("Latest ProxySQL version available: %s\n", latest_version);
}
free(latest_version);
return NULL;
}

Loading…
Cancel
Save