mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Bug#16918: Aborted_clients > Connections.
The problem was that aborted_threads variable was updated twice when a client connection had been aborted. The fix is to refactor a code to have aborted_threads updated only in one place.
This commit is contained in:
parent
f4b671d8bc
commit
ef3bcaf3dd
2 changed files with 17 additions and 11 deletions
|
@ -726,7 +726,6 @@ pthread_handler_t handle_bootstrap(void *arg);
|
||||||
void end_thread(THD *thd,bool put_in_cache);
|
void end_thread(THD *thd,bool put_in_cache);
|
||||||
void flush_thread_cache();
|
void flush_thread_cache();
|
||||||
bool mysql_execute_command(THD *thd);
|
bool mysql_execute_command(THD *thd);
|
||||||
bool do_command(THD *thd);
|
|
||||||
bool dispatch_command(enum enum_server_command command, THD *thd,
|
bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||||
char* packet, uint packet_length);
|
char* packet, uint packet_length);
|
||||||
void log_slow_statement(THD *thd);
|
void log_slow_statement(THD *thd);
|
||||||
|
|
|
@ -93,6 +93,8 @@ const char *xa_state_names[]={
|
||||||
"NON-EXISTING", "ACTIVE", "IDLE", "PREPARED"
|
"NON-EXISTING", "ACTIVE", "IDLE", "PREPARED"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool do_command(THD *thd);
|
||||||
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
static void test_signal(int sig_ptr)
|
static void test_signal(int sig_ptr)
|
||||||
{
|
{
|
||||||
|
@ -1199,23 +1201,28 @@ pthread_handler_t handle_one_connection(void *arg)
|
||||||
}
|
}
|
||||||
if (thd->user_connect)
|
if (thd->user_connect)
|
||||||
decrease_user_connections(thd->user_connect);
|
decrease_user_connections(thd->user_connect);
|
||||||
|
|
||||||
|
if (thd->killed ||
|
||||||
|
net->vio && net->error && net->report_error)
|
||||||
|
{
|
||||||
|
statistic_increment(aborted_threads, &LOCK_status);
|
||||||
|
}
|
||||||
|
|
||||||
if (net->error && net->vio != 0 && net->report_error)
|
if (net->error && net->vio != 0 && net->report_error)
|
||||||
{
|
{
|
||||||
if (!thd->killed && thd->variables.log_warnings > 1)
|
if (!thd->killed && thd->variables.log_warnings > 1)
|
||||||
sql_print_warning(ER(ER_NEW_ABORTING_CONNECTION),
|
{
|
||||||
|
sql_print_warning(ER(ER_NEW_ABORTING_CONNECTION),
|
||||||
thd->thread_id,(thd->db ? thd->db : "unconnected"),
|
thd->thread_id,(thd->db ? thd->db : "unconnected"),
|
||||||
sctx->user ? sctx->user : "unauthenticated",
|
sctx->user ? sctx->user : "unauthenticated",
|
||||||
sctx->host_or_ip,
|
sctx->host_or_ip,
|
||||||
(net->last_errno ? ER(net->last_errno) :
|
(net->last_errno ? ER(net->last_errno) :
|
||||||
ER(ER_UNKNOWN_ERROR)));
|
ER(ER_UNKNOWN_ERROR)));
|
||||||
|
}
|
||||||
|
|
||||||
net_send_error(thd, net->last_errno, NullS);
|
net_send_error(thd, net->last_errno, NullS);
|
||||||
statistic_increment(aborted_threads,&LOCK_status);
|
|
||||||
}
|
}
|
||||||
else if (thd->killed)
|
|
||||||
{
|
|
||||||
statistic_increment(aborted_threads,&LOCK_status);
|
|
||||||
}
|
|
||||||
|
|
||||||
end_thread:
|
end_thread:
|
||||||
close_connection(thd, 0, 1);
|
close_connection(thd, 0, 1);
|
||||||
end_thread(thd,1);
|
end_thread(thd,1);
|
||||||
|
@ -1550,12 +1557,12 @@ bool do_command(THD *thd)
|
||||||
DBUG_PRINT("info",("Got error %d reading command from socket %s",
|
DBUG_PRINT("info",("Got error %d reading command from socket %s",
|
||||||
net->error,
|
net->error,
|
||||||
vio_description(net->vio)));
|
vio_description(net->vio)));
|
||||||
|
|
||||||
/* Check if we can continue without closing the connection */
|
/* Check if we can continue without closing the connection */
|
||||||
|
|
||||||
if (net->error != 3)
|
if (net->error != 3)
|
||||||
{
|
|
||||||
statistic_increment(aborted_threads,&LOCK_status);
|
|
||||||
DBUG_RETURN(TRUE); // We have to close it.
|
DBUG_RETURN(TRUE); // We have to close it.
|
||||||
}
|
|
||||||
net_send_error(thd, net->last_errno, NullS);
|
net_send_error(thd, net->last_errno, NullS);
|
||||||
net->error= 0;
|
net->error= 0;
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
|
|
Loading…
Reference in a new issue