diff --git a/lib/MySQL_Protocol.cpp b/lib/MySQL_Protocol.cpp index 1b671cf96..bfd0e34f1 100644 --- a/lib/MySQL_Protocol.cpp +++ b/lib/MySQL_Protocol.cpp @@ -1893,7 +1893,7 @@ void MySQL_ResultSet::add_err(MySQL_Data_Stream *_myds) { char sqlstate[10]; sprintf(sqlstate,"%s",mysql_sqlstate(_mysql)); if (_myds && _myds->killed_at) { // see case #750 - myprot->generate_pkt_ERR(false,&pkt.ptr,&pkt.size,sid,1907,sqlstate,"Query execution was interrupted, query_timeout exceeded"); + myprot->generate_pkt_ERR(false,&pkt.ptr,&pkt.size,sid,1907,sqlstate,(char *)"Query execution was interrupted, query_timeout exceeded"); } else { myprot->generate_pkt_ERR(false,&pkt.ptr,&pkt.size,sid,mysql_errno(_mysql),sqlstate,mysql_error(_mysql)); } diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index a8a3bf952..931e01ab3 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -2964,7 +2964,7 @@ void MySQL_Session::MySQL_Result_to_MySQL_wire(MYSQL *mysql, MySQL_ResultSet *My char sqlstate[10]; sprintf(sqlstate,"%s",mysql_sqlstate(mysql)); if (_myds && _myds->killed_at) { // see case #750 - client_myds->myprot.generate_pkt_ERR(true,NULL,NULL,client_myds->pkt_sid+1,1907,sqlstate,"Query execution was interrupted, query_timeout exceeded"); + client_myds->myprot.generate_pkt_ERR(true,NULL,NULL,client_myds->pkt_sid+1,1907,sqlstate,(char *)"Query execution was interrupted, query_timeout exceeded"); } else { client_myds->myprot.generate_pkt_ERR(true,NULL,NULL,client_myds->pkt_sid+1,mysql_errno(mysql),sqlstate,mysql_error(mysql)); } diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index 106dae6bd..dcc909207 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -2012,10 +2012,11 @@ __run_skip_1: if (myds) { //if (GloMTH->num_threads >= MIN_THREADS_FOR_MAINTENANCE && idle_maintenance_thread==false) { // here we try to move it to the maintenance thread - if (mypolls.last_recv[n] < curtime - mysql_thread___session_idle_ms) { - if (myds->myds_type==MYDS_FRONTEND && myds->sess) { - if (myds->sess->client_myds == myds) { // extra check - if (myds->DSS==STATE_SLEEP && myds->sess->status==WAITING_CLIENT_DATA) { + if (myds->myds_type==MYDS_FRONTEND && myds->sess) { + if (myds->DSS==STATE_SLEEP && myds->sess->status==WAITING_CLIENT_DATA) { + unsigned long long _tmp_idle = mypolls.last_recv[n] > mypolls.last_sent[n] ? mypolls.last_recv[n] : mypolls.last_sent[n] ; + if (_tmp_idle > curtime - mysql_thread___session_idle_ms) { + if (myds->sess->client_myds == myds && myds->PSarrayOUT->len==0 && (myds->queueOUT.head - myds->queueOUT.tail)==0 ) { // extra check unsigned int j; int conns=0; for (j=0;jsess->mybes->len;j++) { @@ -2073,7 +2074,8 @@ __run_skip_1: if (myds) myds->revents=0; if (mypolls.myds[n] && mypolls.myds[n]->myds_type!=MYDS_LISTENER) { if (myds && myds->myds_type==MYDS_FRONTEND && myds->DSS==STATE_SLEEP && myds->sess && myds->sess->status==WAITING_CLIENT_DATA) { - mypolls.fds[n].events = POLLIN; + //mypolls.fds[n].events = POLLIN; + mypolls.myds[n]->set_pollout(); } else { if (mypolls.myds[n]->DSS > STATE_MARIADB_BEGIN && mypolls.myds[n]->DSS < STATE_MARIADB_END) { mypolls.fds[n].events = POLLIN; diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 563dde93a..ad2f20ad0 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -2280,7 +2280,7 @@ static void * admin_main_loop(void *arg) //size_t c; //int sd; struct sockaddr_in addr; - size_t mystacksize=256*1024; + //size_t mystacksize=256*1024; struct pollfd *fds=((struct _main_args *)arg)->fds; int nfds=((struct _main_args *)arg)->nfds; int *callback_func=((struct _main_args *)arg)->callback_func; @@ -2490,7 +2490,7 @@ void ProxySQL_Admin::print_version() { bool ProxySQL_Admin::init() { //int i; cpu_timer cpt; - size_t mystacksize=256*1024; + //size_t mystacksize=256*1024; child_func[0]=child_mysql; child_func[1]=child_telnet;