Merge pilot.blaudden:/home/msvensson/mysql/bug26664/my50-bug26664
into pilot.blaudden:/home/msvensson/mysql/bug26664/my51-bug26664 include/mysql_com.h: Auto merged include/violite.h: Auto merged libmysql/libmysql.c: Auto merged server-tools/instance-manager/mysql_connection.cc: Auto merged sql-common/client.c: Auto merged sql/mysql_priv.h: Auto merged sql/net_serv.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_repl.cc: Auto merged vio/viosocket.c: Auto merged sql/sql_parse.cc: Merge 5.0->5.1
This commit is contained in:
commit
71eb1afef1
@ -353,6 +353,9 @@ my_bool net_write_command(NET *net,unsigned char command,
|
||||
int net_real_write(NET *net,const char *packet,unsigned long len);
|
||||
unsigned long my_net_read(NET *net);
|
||||
|
||||
void my_net_set_write_timeout(NET *net, uint timeout);
|
||||
void my_net_set_read_timeout(NET *net, uint timeout);
|
||||
|
||||
/*
|
||||
The following function is not meant for normal usage
|
||||
Currently it's used internally by manager.c
|
||||
|
@ -88,7 +88,6 @@ my_bool vio_peer_addr(Vio* vio, char *buf, uint16 *port);
|
||||
/* Remotes in_addr */
|
||||
void vio_in_addr(Vio *vio, struct in_addr *in);
|
||||
my_bool vio_poll_read(Vio *vio,uint timeout);
|
||||
void vio_timeout(Vio *vio,uint which, uint timeout);
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
#include <openssl/opensslv.h>
|
||||
|
@ -67,8 +67,6 @@
|
||||
|
||||
ulong net_buffer_length=8192;
|
||||
ulong max_allowed_packet= 1024L*1024L*1024L;
|
||||
ulong net_read_timeout= CLIENT_NET_READ_TIMEOUT;
|
||||
ulong net_write_timeout= CLIENT_NET_WRITE_TIMEOUT;
|
||||
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
@ -1522,8 +1520,8 @@ my_bool STDCALL mysql_embedded(void)
|
||||
void my_net_local_init(NET *net)
|
||||
{
|
||||
net->max_packet= (uint) net_buffer_length;
|
||||
net->read_timeout= (uint) net_read_timeout;
|
||||
net->write_timeout=(uint) net_write_timeout;
|
||||
my_net_set_read_timeout(net, CLIENT_NET_READ_TIMEOUT);
|
||||
my_net_set_write_timeout(net, CLIENT_NET_WRITE_TIMEOUT);
|
||||
net->retry_count= 1;
|
||||
net->max_packet_size= max(net_buffer_length, max_allowed_packet);
|
||||
}
|
||||
|
@ -62,8 +62,8 @@ C_MODE_START
|
||||
void my_net_local_init(NET *net)
|
||||
{
|
||||
net->max_packet= net_buffer_length;
|
||||
net->read_timeout= net_read_timeout;
|
||||
net->write_timeout= net_write_timeout;
|
||||
my_net_set_read_timeout(net, (uint)net_read_timeout);
|
||||
my_net_set_write_timeout(net, (uint)net_write_timeout);
|
||||
net->retry_count= net_retry_count;
|
||||
net->max_packet_size= max_allowed_packet;
|
||||
}
|
||||
|
@ -2047,13 +2047,11 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
||||
|
||||
/* If user set read_timeout, let it override the default */
|
||||
if (mysql->options.read_timeout)
|
||||
net->read_timeout= mysql->options.read_timeout;
|
||||
vio_timeout(net->vio, 0, net->read_timeout);
|
||||
my_net_set_read_timeout(net, mysql->options.read_timeout);
|
||||
|
||||
/* If user set write_timeout, let it override the default */
|
||||
if (mysql->options.write_timeout)
|
||||
net->write_timeout= mysql->options.write_timeout;
|
||||
vio_timeout(net->vio, 1, net->write_timeout);
|
||||
my_net_set_write_timeout(net, mysql->options.write_timeout);
|
||||
|
||||
if (mysql->options.max_allowed_packet)
|
||||
net->max_packet_size= mysql->options.max_allowed_packet;
|
||||
|
@ -88,9 +88,6 @@ void sql_kill(THD *thd, ulong id, bool only_kill_query);
|
||||
bool net_request_file(NET* net, const char* fname);
|
||||
char* query_table_status(THD *thd,const char *db,const char *table_name);
|
||||
|
||||
void net_set_write_timeout(NET *net, uint timeout);
|
||||
void net_set_read_timeout(NET *net, uint timeout);
|
||||
|
||||
#define x_free(A) { my_free((gptr) (A),MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR)); }
|
||||
#define safeFree(x) { if(x) { my_free((gptr) x,MYF(0)); x = NULL; } }
|
||||
#define PREV_BITS(type,A) ((type) (((type) 1 << (A)) -1))
|
||||
|
@ -609,10 +609,10 @@ net_real_write(NET *net,const char *packet,ulong len)
|
||||
#ifndef NO_ALARM
|
||||
thr_alarm_init(&alarmed);
|
||||
if (net_blocking)
|
||||
thr_alarm(&alarmed,(uint) net->write_timeout,&alarm_buff);
|
||||
thr_alarm(&alarmed, net->write_timeout, &alarm_buff);
|
||||
#else
|
||||
alarmed=0;
|
||||
/* Write timeout is set in net_set_write_timeout */
|
||||
/* Write timeout is set in my_net_set_write_timeout */
|
||||
#endif /* NO_ALARM */
|
||||
|
||||
pos=(char*) packet; end=pos+len;
|
||||
@ -624,7 +624,7 @@ net_real_write(NET *net,const char *packet,ulong len)
|
||||
#if !defined(__WIN__)
|
||||
if ((interrupted || length==0) && !thr_alarm_in_use(&alarmed))
|
||||
{
|
||||
if (!thr_alarm(&alarmed,(uint) net->write_timeout,&alarm_buff))
|
||||
if (!thr_alarm(&alarmed, net->write_timeout, &alarm_buff))
|
||||
{ /* Always true for client */
|
||||
my_bool old_mode;
|
||||
while (vio_blocking(net->vio, TRUE, &old_mode) < 0)
|
||||
@ -805,7 +805,7 @@ my_real_read(NET *net, ulong *complen)
|
||||
if (net_blocking)
|
||||
thr_alarm(&alarmed,net->read_timeout,&alarm_buff);
|
||||
#else
|
||||
/* Read timeout is set in net_set_read_timeout */
|
||||
/* Read timeout is set in my_net_set_read_timeout */
|
||||
#endif /* NO_ALARM */
|
||||
|
||||
pos = net->buff + net->where_b; /* net->packet -4 */
|
||||
@ -1120,9 +1120,9 @@ my_net_read(NET *net)
|
||||
}
|
||||
|
||||
|
||||
void net_set_read_timeout(NET *net, uint timeout)
|
||||
void my_net_set_read_timeout(NET *net, uint timeout)
|
||||
{
|
||||
DBUG_ENTER("net_set_read_timeout");
|
||||
DBUG_ENTER("my_net_set_read_timeout");
|
||||
DBUG_PRINT("enter", ("timeout: %d", timeout));
|
||||
net->read_timeout= timeout;
|
||||
#ifdef NO_ALARM
|
||||
@ -1132,9 +1132,9 @@ void net_set_read_timeout(NET *net, uint timeout)
|
||||
}
|
||||
|
||||
|
||||
void net_set_write_timeout(NET *net, uint timeout)
|
||||
void my_net_set_write_timeout(NET *net, uint timeout)
|
||||
{
|
||||
DBUG_ENTER("net_set_write_timeout");
|
||||
DBUG_ENTER("my_net_set_write_timeout");
|
||||
DBUG_PRINT("enter", ("timeout: %d", timeout));
|
||||
net->write_timeout= timeout;
|
||||
#ifdef NO_ALARM
|
||||
|
@ -902,14 +902,14 @@ static int check_completion_type(THD *thd, set_var *var)
|
||||
static void fix_net_read_timeout(THD *thd, enum_var_type type)
|
||||
{
|
||||
if (type != OPT_GLOBAL)
|
||||
net_set_read_timeout(&thd->net, thd->variables.net_read_timeout);
|
||||
my_net_set_read_timeout(&thd->net, thd->variables.net_read_timeout);
|
||||
}
|
||||
|
||||
|
||||
static void fix_net_write_timeout(THD *thd, enum_var_type type)
|
||||
{
|
||||
if (type != OPT_GLOBAL)
|
||||
net_set_write_timeout(&thd->net, thd->variables.net_write_timeout);
|
||||
my_net_set_write_timeout(&thd->net, thd->variables.net_write_timeout);
|
||||
}
|
||||
|
||||
static void fix_net_retry_count(THD *thd, enum_var_type type)
|
||||
|
@ -28,8 +28,11 @@ void my_net_local_init(NET *net)
|
||||
{
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
net->max_packet= (uint) global_system_variables.net_buffer_length;
|
||||
net->read_timeout= (uint) global_system_variables.net_read_timeout;
|
||||
net->write_timeout=(uint) global_system_variables.net_write_timeout;
|
||||
|
||||
my_net_set_read_timeout(net, (uint)global_system_variables.net_read_timeout);
|
||||
my_net_set_write_timeout(net,
|
||||
(uint)global_system_variables.net_write_timeout);
|
||||
|
||||
net->retry_count= (uint) global_system_variables.net_retry_count;
|
||||
net->max_packet_size= max(global_system_variables.net_buffer_length,
|
||||
global_system_variables.max_allowed_packet);
|
||||
|
@ -621,7 +621,7 @@ bool do_command(THD *thd)
|
||||
the client, the connection is closed or "net_wait_timeout"
|
||||
number of seconds has passed
|
||||
*/
|
||||
net_set_read_timeout(net, thd->variables.net_wait_timeout);
|
||||
my_net_set_read_timeout(net, thd->variables.net_wait_timeout);
|
||||
|
||||
thd->clear_error(); // Clear error message
|
||||
|
||||
@ -653,7 +653,7 @@ bool do_command(THD *thd)
|
||||
}
|
||||
|
||||
/* Restore read timeout value */
|
||||
net_set_read_timeout(net, thd->variables.net_read_timeout);
|
||||
my_net_set_read_timeout(net, thd->variables.net_read_timeout);
|
||||
|
||||
/*
|
||||
packet_length contains length of data, as it was stored in packet
|
||||
|
@ -96,7 +96,7 @@ static int send_file(THD *thd)
|
||||
the job
|
||||
*/
|
||||
old_timeout= net->read_timeout;
|
||||
net_set_read_timeout(net, thd->variables.net_wait_timeout);
|
||||
my_net_set_read_timeout(net, thd->variables.net_wait_timeout);
|
||||
|
||||
/*
|
||||
We need net_flush here because the client will not know it needs to send
|
||||
@ -140,7 +140,7 @@ static int send_file(THD *thd)
|
||||
error = 0;
|
||||
|
||||
err:
|
||||
net_set_read_timeout(net, old_timeout);
|
||||
my_net_set_read_timeout(net, old_timeout);
|
||||
if (fd >= 0)
|
||||
(void) my_close(fd, MYF(0));
|
||||
if (errmsg)
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <violite.h>
|
||||
|
||||
void vio_ignore_timeout(Vio *vio, uint which, uint timeout);
|
||||
void vio_timeout(Vio *vio,uint which, uint timeout);
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
#include "my_net.h" /* needed because of struct in_addr */
|
||||
|
@ -203,13 +203,14 @@ int vio_fastsend(Vio * vio __attribute__((unused)))
|
||||
{
|
||||
#ifdef __WIN__
|
||||
BOOL nodelay= 1;
|
||||
r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (const char*) &nodelay,
|
||||
sizeof(nodelay));
|
||||
#else
|
||||
int nodelay = 1;
|
||||
r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (void*) &nodelay,
|
||||
#endif
|
||||
|
||||
r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY,
|
||||
IF_WIN(const char*, void*) &nodelay,
|
||||
sizeof(nodelay));
|
||||
#endif /* __WIN__ */
|
||||
|
||||
}
|
||||
if (r)
|
||||
{
|
||||
@ -379,28 +380,39 @@ my_bool vio_poll_read(Vio *vio,uint timeout)
|
||||
|
||||
void vio_timeout(Vio *vio, uint which, uint timeout)
|
||||
{
|
||||
/* TODO: some action should be taken if socket timeouts are not supported. */
|
||||
#if defined(SO_SNDTIMEO) && defined(SO_RCVTIMEO)
|
||||
int r;
|
||||
DBUG_ENTER("vio_timeout");
|
||||
|
||||
{
|
||||
#ifdef __WIN__
|
||||
|
||||
/* Windows expects time in milliseconds as int. */
|
||||
/* Windows expects time in milliseconds as int */
|
||||
int wait_timeout= (int) timeout * 1000;
|
||||
|
||||
#else /* ! __WIN__ */
|
||||
|
||||
#else
|
||||
/* POSIX specifies time as struct timeval. */
|
||||
struct timeval wait_timeout;
|
||||
wait_timeout.tv_sec= timeout;
|
||||
wait_timeout.tv_usec= 0;
|
||||
#endif
|
||||
|
||||
#endif /* ! __WIN__ */
|
||||
r= setsockopt(vio->sd, SOL_SOCKET, which ? SO_SNDTIMEO : SO_RCVTIMEO,
|
||||
IF_WIN(const char*, const void*)&wait_timeout,
|
||||
sizeof(wait_timeout));
|
||||
|
||||
/* TODO: return value should be checked. */
|
||||
(void) setsockopt(vio->sd, SOL_SOCKET, which ? SO_SNDTIMEO : SO_RCVTIMEO,
|
||||
(char*) &wait_timeout, sizeof(wait_timeout));
|
||||
}
|
||||
|
||||
#endif /* defined(SO_SNDTIMEO) && defined(SO_RCVTIMEO) */
|
||||
#ifndef DBUG_OFF
|
||||
if (r != 0)
|
||||
DBUG_PRINT("error", ("setsockopt failed: %d, errno: %d", r, socket_errno));
|
||||
#endif
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
#else
|
||||
/*
|
||||
Platforms not suporting setting of socket timeout should either use
|
||||
thr_alarm or just run without read/write timeout(s)
|
||||
*/
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user