Commit 9b924484 authored by unknown's avatar unknown

Merge shellback.(none):/home/msvensson/mysql/mysql-5.0

into  shellback.(none):/home/msvensson/mysql/mysql-5.1


sql/field.h:
  Auto merged
parents dc2e5fff 1271d8b9
...@@ -173,8 +173,9 @@ class Field ...@@ -173,8 +173,9 @@ class Field
virtual int cmp(const char *,const char *)=0; virtual int cmp(const char *,const char *)=0;
virtual int cmp_binary(const char *a,const char *b, uint32 max_length=~0L) virtual int cmp_binary(const char *a,const char *b, uint32 max_length=~0L)
{ return memcmp(a,b,pack_length()); } { return memcmp(a,b,pack_length()); }
int cmp_offset(uint row_offset) { return cmp(ptr,ptr+row_offset); } virtual int cmp_offset(uint row_offset)
int cmp_binary_offset(uint row_offset) { return cmp(ptr,ptr+row_offset); }
virtual int cmp_binary_offset(uint row_offset)
{ return cmp_binary(ptr, ptr+row_offset); }; { return cmp_binary(ptr, ptr+row_offset); };
virtual int key_cmp(const byte *a,const byte *b) virtual int key_cmp(const byte *a,const byte *b)
{ return cmp((char*) a,(char*) b); } { return cmp((char*) a,(char*) b); }
...@@ -1347,6 +1348,8 @@ class Field_bit :public Field { ...@@ -1347,6 +1348,8 @@ class Field_bit :public Field {
{ return cmp_binary((char *) a, (char *) b); } { return cmp_binary((char *) a, (char *) b); }
int key_cmp(const byte *str, uint length); int key_cmp(const byte *str, uint length);
int cmp_offset(uint row_offset); int cmp_offset(uint row_offset);
int cmp_binary_offset(uint row_offset)
{ return cmp_offset(row_offset); }
void get_key_image(char *buff, uint length, imagetype type); void get_key_image(char *buff, uint length, imagetype type);
void set_key_image(char *buff, uint length) void set_key_image(char *buff, uint length)
{ Field_bit::store(buff, length, &my_charset_bin); } { Field_bit::store(buff, length, &my_charset_bin); }
......
...@@ -208,23 +208,40 @@ my_bool net_realloc(NET *net, ulong length) ...@@ -208,23 +208,40 @@ my_bool net_realloc(NET *net, ulong length)
RETURN VALUES RETURN VALUES
0 No data to read 0 No data to read
1 Data or EOF to read 1 Data or EOF to read
-1 Don't know if data is ready or not
*/ */
static my_bool net_data_is_ready(my_socket sd) static int net_data_is_ready(my_socket sd)
{ {
#ifdef HAVE_POLL
struct pollfd ufds;
int res;
ufds.fd= sd;
ufds.events= POLLIN | POLLPRI;
if (!(res= poll(&ufds, 1, 0)))
return 0;
if (res < 0 || !(ufds.revents & (POLLIN | POLLPRI)))
return 0;
return 1;
#else
fd_set sfds; fd_set sfds;
struct timeval tv; struct timeval tv;
int res; int res;
if (sd >= FD_SETSIZE)
return -1;
FD_ZERO(&sfds); FD_ZERO(&sfds);
FD_SET(sd, &sfds); FD_SET(sd, &sfds);
tv.tv_sec= tv.tv_usec= 0; tv.tv_sec= tv.tv_usec= 0;
if ((res= select(sd+1, &sfds, NULL, NULL, &tv)) < 0) if ((res= select(sd+1, &sfds, NULL, NULL, &tv)) < 0)
return FALSE; return 0;
else else
return test(res ? FD_ISSET(sd, &sfds) : 0); return test(res ? FD_ISSET(sd, &sfds) : 0);
#endif
} }
...@@ -251,10 +268,10 @@ static my_bool net_data_is_ready(my_socket sd) ...@@ -251,10 +268,10 @@ static my_bool net_data_is_ready(my_socket sd)
void net_clear(NET *net) void net_clear(NET *net)
{ {
int count; int count, ready;
DBUG_ENTER("net_clear"); DBUG_ENTER("net_clear");
#if !defined(EMBEDDED_LIBRARY) #if !defined(EMBEDDED_LIBRARY)
while(net_data_is_ready(net->vio->sd)) while((ready= net_data_is_ready(net->vio->sd)) != 0)
{ {
/* The socket is ready */ /* The socket is ready */
if ((count= vio_read(net->vio, (char*) (net->buff), if ((count= vio_read(net->vio, (char*) (net->buff),
...@@ -269,6 +286,10 @@ void net_clear(NET *net) ...@@ -269,6 +286,10 @@ void net_clear(NET *net)
} }
else else
{ {
/* No data to read and 'net_data_is_ready' returned "don't know" */
if (ready == -1)
break;
DBUG_PRINT("info",("socket ready but only EOF to read - disconnected")); DBUG_PRINT("info",("socket ready but only EOF to read - disconnected"));
net->error= 2; net->error= 2;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment