mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
Merge shellback.(none):/home/msvensson/mysql/mysql-5.0
into shellback.(none):/home/msvensson/mysql/mysql-5.1
This commit is contained in:
commit
59af694195
2 changed files with 30 additions and 6 deletions
|
@ -173,8 +173,9 @@ public:
|
|||
virtual int cmp(const char *,const char *)=0;
|
||||
virtual int cmp_binary(const char *a,const char *b, uint32 max_length=~0L)
|
||||
{ return memcmp(a,b,pack_length()); }
|
||||
int cmp_offset(uint row_offset) { return cmp(ptr,ptr+row_offset); }
|
||||
int cmp_binary_offset(uint row_offset)
|
||||
virtual int cmp_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); };
|
||||
virtual int key_cmp(const byte *a,const byte *b)
|
||||
{ return cmp((char*) a,(char*) b); }
|
||||
|
@ -1347,6 +1348,8 @@ public:
|
|||
{ return cmp_binary((char *) a, (char *) b); }
|
||||
int key_cmp(const byte *str, uint length);
|
||||
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 set_key_image(char *buff, uint length)
|
||||
{ Field_bit::store(buff, length, &my_charset_bin); }
|
||||
|
|
|
@ -208,23 +208,40 @@ my_bool net_realloc(NET *net, ulong length)
|
|||
RETURN VALUES
|
||||
0 No data 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;
|
||||
struct timeval tv;
|
||||
int res;
|
||||
|
||||
if (sd >= FD_SETSIZE)
|
||||
return -1;
|
||||
|
||||
FD_ZERO(&sfds);
|
||||
FD_SET(sd, &sfds);
|
||||
|
||||
tv.tv_sec= tv.tv_usec= 0;
|
||||
|
||||
if ((res= select(sd+1, &sfds, NULL, NULL, &tv)) < 0)
|
||||
return FALSE;
|
||||
return 0;
|
||||
else
|
||||
return test(res ? FD_ISSET(sd, &sfds) : 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -251,10 +268,10 @@ static my_bool net_data_is_ready(my_socket sd)
|
|||
|
||||
void net_clear(NET *net)
|
||||
{
|
||||
int count;
|
||||
int count, ready;
|
||||
DBUG_ENTER("net_clear");
|
||||
#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 */
|
||||
if ((count= vio_read(net->vio, (char*) (net->buff),
|
||||
|
@ -269,6 +286,10 @@ void net_clear(NET *net)
|
|||
}
|
||||
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"));
|
||||
net->error= 2;
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue