mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
More fixes
This commit is contained in:
2
TODO
2
TODO
@ -1,4 +1,4 @@
|
|||||||
State of MERGE between MariaDB 5.5 and MySQL 5.6.5
|
State of MERGE between MariaDB 5.5 and MySQL 5.6.5-m8
|
||||||
|
|
||||||
Featured copied/merged
|
Featured copied/merged
|
||||||
- storage/innodb/*
|
- storage/innodb/*
|
||||||
|
@ -50,7 +50,7 @@ static char *default_dbug_option= (char*) "d:t:O,/tmp/comp_err.trace";
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Header for errmsg.sys files */
|
/* Header for errmsg.sys files */
|
||||||
uchar file_head[]= { 254, 254, 2, 1 };
|
uchar file_head[]= { 254, 254, 2, 2 };
|
||||||
/* Store positions to each error message row to store in errmsg.sys header */
|
/* Store positions to each error message row to store in errmsg.sys header */
|
||||||
uint file_pos[MAX_ROWS];
|
uint file_pos[MAX_ROWS];
|
||||||
|
|
||||||
@ -371,8 +371,8 @@ static int create_sys_files(struct languages *lang_head,
|
|||||||
bzero((uchar*) head, HEADER_LENGTH);
|
bzero((uchar*) head, HEADER_LENGTH);
|
||||||
bmove((uchar *) head, (uchar *) file_head, 4);
|
bmove((uchar *) head, (uchar *) file_head, 4);
|
||||||
head[4]= 1;
|
head[4]= 1;
|
||||||
int2store(head + 6, length);
|
int4store(head + 6, length);
|
||||||
int2store(head + 8, row_count);
|
int2store(head + 10, row_count);
|
||||||
head[30]= csnum;
|
head[30]= csnum;
|
||||||
|
|
||||||
my_fseek(to, 0l, MY_SEEK_SET, MYF(0));
|
my_fseek(to, 0l, MY_SEEK_SET, MYF(0));
|
||||||
|
@ -87,8 +87,6 @@ struct my_option
|
|||||||
|
|
||||||
|
|
||||||
typedef my_bool (*my_get_one_option)(int, const struct my_option *, char *);
|
typedef my_bool (*my_get_one_option)(int, const struct my_option *, char *);
|
||||||
typedef void (*my_error_reporter)(enum loglevel level, const char *format, ...)
|
|
||||||
ATTRIBUTE_FORMAT_FPTR(printf, 2, 3);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Used to retrieve a reference to the object (variable) that holds the value
|
Used to retrieve a reference to the object (variable) that holds the value
|
||||||
|
@ -1015,9 +1015,9 @@ typedef struct st_mysql_lex_string LEX_STRING;
|
|||||||
#define closesocket(A) close(A)
|
#define closesocket(A) close(A)
|
||||||
#define SOCKET_EINTR EINTR
|
#define SOCKET_EINTR EINTR
|
||||||
#define SOCKET_EAGAIN EAGAIN
|
#define SOCKET_EAGAIN EAGAIN
|
||||||
#define SOCKET_ETIMEDOUT SOCKET_EINTR
|
|
||||||
#define SOCKET_EWOULDBLOCK EWOULDBLOCK
|
#define SOCKET_EWOULDBLOCK EWOULDBLOCK
|
||||||
#define SOCKET_EADDRINUSE EADDRINUSE
|
#define SOCKET_EADDRINUSE EADDRINUSE
|
||||||
|
#define SOCKET_ETIMEDOUT ETIMEDOUT
|
||||||
#define SOCKET_ECONNRESET ECONNRESET
|
#define SOCKET_ECONNRESET ECONNRESET
|
||||||
#define SOCKET_ENFILE ENFILE
|
#define SOCKET_ENFILE ENFILE
|
||||||
#define SOCKET_EMFILE EMFILE
|
#define SOCKET_EMFILE EMFILE
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
#define TRASH_FILL(A,B,C) do { const size_t trash_tmp= (B) ; bfill(A, trash_tmp, C); MEM_UNDEFINED(A, trash_tmp); } while (0)
|
#define TRASH_FILL(A,B,C) do { const size_t trash_tmp= (B) ; bfill(A, trash_tmp, C); MEM_UNDEFINED(A, trash_tmp); } while (0)
|
||||||
#else
|
#else
|
||||||
#define TRASH_FILL(A,B,C) do{ const size_t trash_tmp= (B) ; MEM_CHECK_ADDRESSABLE(A,trash_tmp);MEM_UNDEFINED(A,trash_tmp);} while (0)
|
#define TRASH_FILL(A,B,C) do{ const size_t trash_tmp __attribute((unused)) = (B) ; MEM_CHECK_ADDRESSABLE(A,trash_tmp);MEM_UNDEFINED(A,trash_tmp);} while (0)
|
||||||
#endif
|
#endif
|
||||||
#define TRASH_ALLOC(A,B) TRASH_FILL(A,B,0xA5)
|
#define TRASH_ALLOC(A,B) TRASH_FILL(A,B,0xA5)
|
||||||
#define TRASH_FREE(A,B) TRASH_FILL(A,B,0x8F)
|
#define TRASH_FREE(A,B) TRASH_FILL(A,B,0x8F)
|
||||||
|
@ -88,7 +88,6 @@ int vio_keepalive(Vio *vio, my_bool onoff);
|
|||||||
my_bool vio_should_retry(Vio *vio);
|
my_bool vio_should_retry(Vio *vio);
|
||||||
/* Check that operation was timed out */
|
/* Check that operation was timed out */
|
||||||
my_bool vio_was_timeout(Vio *vio);
|
my_bool vio_was_timeout(Vio *vio);
|
||||||
my_bool vio_was_interrupted(Vio *vio);
|
|
||||||
/* Short text description of the socket for those, who are curious.. */
|
/* Short text description of the socket for those, who are curious.. */
|
||||||
const char* vio_description(Vio *vio);
|
const char* vio_description(Vio *vio);
|
||||||
/* Return the type of the connection */
|
/* Return the type of the connection */
|
||||||
@ -192,12 +191,10 @@ void vio_end(void);
|
|||||||
#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive)
|
#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive)
|
||||||
#define vio_should_retry(vio) (vio)->should_retry(vio)
|
#define vio_should_retry(vio) (vio)->should_retry(vio)
|
||||||
#define vio_was_timeout(vio) (vio)->was_timeout(vio)
|
#define vio_was_timeout(vio) (vio)->was_timeout(vio)
|
||||||
#define vio_was_interrupted(vio) (vio)->was_interrupted(vio)
|
|
||||||
#define vio_close(vio) ((vio)->vioclose)(vio)
|
#define vio_close(vio) ((vio)->vioclose)(vio)
|
||||||
#define vio_shutdown(vio,how) ((vio)->shutdown)(vio,how)
|
#define vio_shutdown(vio,how) ((vio)->shutdown)(vio,how)
|
||||||
#define vio_peer_addr(vio, buf, prt, buflen) (vio)->peer_addr(vio, buf, prt, buflen)
|
#define vio_peer_addr(vio, buf, prt, buflen) (vio)->peer_addr(vio, buf, prt, buflen)
|
||||||
#define vio_io_wait(vio, event, timeout) (vio)->io_wait(vio, event, timeout)
|
#define vio_io_wait(vio, event, timeout) (vio)->io_wait(vio, event, timeout)
|
||||||
#define vio_timeout(vio, which, seconds) (vio)->timeout(vio, which, seconds)
|
|
||||||
#define vio_is_connected(vio) (vio)->is_connected(vio)
|
#define vio_is_connected(vio) (vio)->is_connected(vio)
|
||||||
#endif /* !defined(DONT_MAP_VIO) */
|
#endif /* !defined(DONT_MAP_VIO) */
|
||||||
|
|
||||||
@ -260,7 +257,6 @@ struct st_vio
|
|||||||
void (*in_addr)(Vio*, struct sockaddr_storage*);
|
void (*in_addr)(Vio*, struct sockaddr_storage*);
|
||||||
my_bool (*should_retry)(Vio*);
|
my_bool (*should_retry)(Vio*);
|
||||||
my_bool (*was_timeout)(Vio*);
|
my_bool (*was_timeout)(Vio*);
|
||||||
my_bool (*was_interrupted)(Vio*);
|
|
||||||
int (*vioclose)(Vio*);
|
int (*vioclose)(Vio*);
|
||||||
my_bool (*is_connected)(Vio*);
|
my_bool (*is_connected)(Vio*);
|
||||||
int (*shutdown)(Vio *, int);
|
int (*shutdown)(Vio *, int);
|
||||||
|
@ -5,11 +5,12 @@ innodb
|
|||||||
innodb-cmpmem
|
innodb-cmpmem
|
||||||
innodb-trx
|
innodb-trx
|
||||||
innodb-sys-index
|
innodb-sys-index
|
||||||
xtradb-admin-command
|
loose-xtradb-admin-command
|
||||||
|
|
||||||
[xtradb]
|
[xtradb]
|
||||||
innodb
|
innodb
|
||||||
innodb-cmpmem
|
innodb-cmpmem
|
||||||
innodb-trx
|
innodb-trx
|
||||||
innodb-sys-index
|
innodb-sys-index
|
||||||
xtradb-admin-command
|
loose-xtradb-admin-command
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ DROP TABLE t1;
|
|||||||
# SELECT is not detected
|
# SELECT is not detected
|
||||||
#
|
#
|
||||||
SET @old_innodb_thread_concurrency:= @@innodb_thread_concurrency;
|
SET @old_innodb_thread_concurrency:= @@innodb_thread_concurrency;
|
||||||
|
SET @old_innodb_thread_sleep_delay := @@innodb_thread_sleep_delay;
|
||||||
SET GLOBAL innodb_thread_concurrency = 1;
|
SET GLOBAL innodb_thread_concurrency = 1;
|
||||||
CREATE TABLE t1
|
CREATE TABLE t1
|
||||||
(user_num BIGINT,
|
(user_num BIGINT,
|
||||||
@ -91,6 +92,7 @@ COMMIT;
|
|||||||
# con1, reaping ALTER.
|
# con1, reaping ALTER.
|
||||||
# Disconnecting con1 and switching to default. Cleaning up.
|
# Disconnecting con1 and switching to default. Cleaning up.
|
||||||
SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
|
SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
|
||||||
|
SET GLOBAL innodb_thread_sleep_delay = @old_innodb_thread_sleep_delay;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Bug#50418: DROP PARTITION does not interact with transactions
|
# Bug#50418: DROP PARTITION does not interact with transactions
|
||||||
|
@ -72,6 +72,7 @@ DROP TABLE t1;
|
|||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
SET @old_innodb_thread_concurrency:= @@innodb_thread_concurrency;
|
SET @old_innodb_thread_concurrency:= @@innodb_thread_concurrency;
|
||||||
|
SET @old_innodb_thread_sleep_delay := @@innodb_thread_sleep_delay;
|
||||||
SET GLOBAL innodb_thread_concurrency = 1;
|
SET GLOBAL innodb_thread_concurrency = 1;
|
||||||
|
|
||||||
CREATE TABLE t1
|
CREATE TABLE t1
|
||||||
@ -120,6 +121,7 @@ COMMIT;
|
|||||||
--connection default
|
--connection default
|
||||||
|
|
||||||
SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
|
SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
|
||||||
|
SET GLOBAL innodb_thread_sleep_delay = @old_innodb_thread_sleep_delay;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
@ -775,7 +775,7 @@ restart:
|
|||||||
DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %lu",
|
DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %lu",
|
||||||
vio_description(net->vio),len));
|
vio_description(net->vio),len));
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
if (net->vio && vio_was_interrupted(net->vio))
|
if (net->vio && (net->last_errno == ER_NET_READ_INTERRUPTED))
|
||||||
return (packet_error);
|
return (packet_error);
|
||||||
#endif /*MYSQL_SERVER*/
|
#endif /*MYSQL_SERVER*/
|
||||||
end_server(mysql);
|
end_server(mysql);
|
||||||
|
@ -186,12 +186,12 @@ bool read_texts(const char *file_name, const char *language,
|
|||||||
goto err;
|
goto err;
|
||||||
funktpos=2;
|
funktpos=2;
|
||||||
if (head[0] != (uchar) 254 || head[1] != (uchar) 254 ||
|
if (head[0] != (uchar) 254 || head[1] != (uchar) 254 ||
|
||||||
head[2] != 2 || head[3] != 1)
|
head[2] != 2 || head[3] != 2)
|
||||||
goto err; /* purecov: inspected */
|
goto err; /* purecov: inspected */
|
||||||
textcount=head[4];
|
textcount=head[4];
|
||||||
|
|
||||||
error_message_charset_info= system_charset_info;
|
error_message_charset_info= system_charset_info;
|
||||||
length=uint2korr(head+6); count=uint2korr(head+8);
|
length=uint4korr(head+6); count=uint2korr(head+10);
|
||||||
|
|
||||||
if (count < error_messages)
|
if (count < error_messages)
|
||||||
{
|
{
|
||||||
@ -203,7 +203,7 @@ Error message file '%s' had only %d error messages, but it should contain at lea
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(*point= (const char**)
|
if (!(*point= (const char**)
|
||||||
my_malloc((size_t) (length+count*sizeof(char*)),MYF(0))))
|
my_malloc((size_t) (max(length,count*2)+count*sizeof(char*)),MYF(0))))
|
||||||
{
|
{
|
||||||
funktpos=3; /* purecov: inspected */
|
funktpos=3; /* purecov: inspected */
|
||||||
goto err; /* purecov: inspected */
|
goto err; /* purecov: inspected */
|
||||||
|
@ -295,7 +295,7 @@ void net_clear(NET *net, my_bool clear_buffer __attribute__((unused)))
|
|||||||
{
|
{
|
||||||
size_t count;
|
size_t count;
|
||||||
int ready;
|
int ready;
|
||||||
while ((ready= net_data_is_ready(net->vio->sd)) > 0)
|
while ((ready= net_data_is_ready(vio_fd(net->vio))) > 0)
|
||||||
{
|
{
|
||||||
/* The socket is ready */
|
/* The socket is ready */
|
||||||
if ((long) (count= vio_read(net->vio, net->buff,
|
if ((long) (count= vio_read(net->vio, net->buff,
|
||||||
@ -895,7 +895,7 @@ my_real_read(NET *net, size_t *complen)
|
|||||||
remain, vio_errno(net->vio), (long) length));
|
remain, vio_errno(net->vio), (long) length));
|
||||||
len= packet_error;
|
len= packet_error;
|
||||||
net->error= 2; /* Close socket */
|
net->error= 2; /* Close socket */
|
||||||
net->last_errno= (vio_was_interrupted(net->vio) ?
|
net->last_errno= (vio_was_timeout(net->vio) ?
|
||||||
ER_NET_READ_INTERRUPTED :
|
ER_NET_READ_INTERRUPTED :
|
||||||
ER_NET_READ_ERROR);
|
ER_NET_READ_ERROR);
|
||||||
MYSQL_SERVER_my_error(net->last_errno, MYF(0));
|
MYSQL_SERVER_my_error(net->last_errno, MYF(0));
|
||||||
@ -1160,13 +1160,12 @@ void my_net_set_read_timeout(NET *net, uint timeout)
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("my_net_set_read_timeout");
|
DBUG_ENTER("my_net_set_read_timeout");
|
||||||
DBUG_PRINT("enter", ("timeout: %d", timeout));
|
DBUG_PRINT("enter", ("timeout: %d", timeout));
|
||||||
if (net->read_timeout == timeout)
|
if (net->read_timeout != timeout)
|
||||||
DBUG_VOID_RETURN;
|
{
|
||||||
net->read_timeout= timeout;
|
net->read_timeout= timeout;
|
||||||
#ifdef NO_ALARM
|
|
||||||
if (net->vio)
|
if (net->vio)
|
||||||
vio_timeout(net->vio, 0, timeout);
|
vio_timeout(net->vio, 0, timeout);
|
||||||
#endif
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1175,12 +1174,11 @@ void my_net_set_write_timeout(NET *net, uint timeout)
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("my_net_set_write_timeout");
|
DBUG_ENTER("my_net_set_write_timeout");
|
||||||
DBUG_PRINT("enter", ("timeout: %d", timeout));
|
DBUG_PRINT("enter", ("timeout: %d", timeout));
|
||||||
if (net->write_timeout == timeout)
|
if (net->write_timeout != timeout)
|
||||||
DBUG_VOID_RETURN;
|
{
|
||||||
net->write_timeout= timeout;
|
net->write_timeout= timeout;
|
||||||
#ifdef NO_ALARM
|
|
||||||
if (net->vio)
|
if (net->vio)
|
||||||
vio_timeout(net->vio, 1, timeout);
|
vio_timeout(net->vio, 1, timeout);
|
||||||
#endif
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
@ -119,6 +119,10 @@ void cleanup_account(void)
|
|||||||
account_array= NULL;
|
account_array= NULL;
|
||||||
pfs_free(account_instr_class_waits_array);
|
pfs_free(account_instr_class_waits_array);
|
||||||
account_instr_class_waits_array= NULL;
|
account_instr_class_waits_array= NULL;
|
||||||
|
pfs_free(account_instr_class_stages_array);
|
||||||
|
account_instr_class_stages_array= 0;
|
||||||
|
pfs_free(account_instr_class_statements_array);
|
||||||
|
account_instr_class_statements_array=0;
|
||||||
account_max= 0;
|
account_max= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,6 +467,10 @@ void cleanup_instruments(void)
|
|||||||
global_instr_class_stages_array= NULL;
|
global_instr_class_stages_array= NULL;
|
||||||
pfs_free(global_instr_class_statements_array);
|
pfs_free(global_instr_class_statements_array);
|
||||||
global_instr_class_statements_array= NULL;
|
global_instr_class_statements_array= NULL;
|
||||||
|
pfs_free(thread_instr_class_statements_array);
|
||||||
|
thread_instr_class_statements_array= NULL;
|
||||||
|
pfs_free(thread_instr_class_stages_array);
|
||||||
|
thread_instr_class_stages_array= NULL;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +157,6 @@ static void destroy_pfs_thread(void *key)
|
|||||||
static void cleanup_performance_schema(void)
|
static void cleanup_performance_schema(void)
|
||||||
{
|
{
|
||||||
cleanup_instrument_config();
|
cleanup_instrument_config();
|
||||||
/* Disabled: Bug#5666
|
|
||||||
cleanup_instruments();
|
cleanup_instruments();
|
||||||
cleanup_sync_class();
|
cleanup_sync_class();
|
||||||
cleanup_thread_class();
|
cleanup_thread_class();
|
||||||
@ -182,8 +181,8 @@ static void cleanup_performance_schema(void)
|
|||||||
cleanup_account();
|
cleanup_account();
|
||||||
cleanup_account_hash();
|
cleanup_account_hash();
|
||||||
cleanup_digest();
|
cleanup_digest();
|
||||||
|
cleanup_digest_hash();
|
||||||
PFS_atomic::cleanup();
|
PFS_atomic::cleanup();
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void shutdown_performance_schema(void)
|
void shutdown_performance_schema(void)
|
||||||
|
@ -106,6 +106,8 @@ static void vio_init(Vio *vio, enum enum_vio_type type,
|
|||||||
vio->was_timeout =vio_was_timeout;
|
vio->was_timeout =vio_was_timeout;
|
||||||
vio->vioclose =vio_close_pipe;
|
vio->vioclose =vio_close_pipe;
|
||||||
vio->peer_addr =vio_peer_addr;
|
vio->peer_addr =vio_peer_addr;
|
||||||
|
vio->vioblocking =vio_blocking;
|
||||||
|
vio->is_blocking =vio_is_blocking;
|
||||||
vio->io_wait =no_io_wait;
|
vio->io_wait =no_io_wait;
|
||||||
vio->is_connected =vio_is_connected_pipe;
|
vio->is_connected =vio_is_connected_pipe;
|
||||||
vio->has_data =has_no_data;
|
vio->has_data =has_no_data;
|
||||||
@ -126,6 +128,8 @@ static void vio_init(Vio *vio, enum enum_vio_type type,
|
|||||||
vio->was_timeout =vio_was_timeout;
|
vio->was_timeout =vio_was_timeout;
|
||||||
vio->vioclose =vio_close_shared_memory;
|
vio->vioclose =vio_close_shared_memory;
|
||||||
vio->peer_addr =vio_peer_addr;
|
vio->peer_addr =vio_peer_addr;
|
||||||
|
vio->vioblocking =vio_blocking;
|
||||||
|
vio->is_blocking =vio_is_blocking;
|
||||||
vio->io_wait =no_io_wait;
|
vio->io_wait =no_io_wait;
|
||||||
vio->is_connected =vio_is_connected_shared_memory;
|
vio->is_connected =vio_is_connected_shared_memory;
|
||||||
vio->has_data =vio_shared_memory_has_data;
|
vio->has_data =vio_shared_memory_has_data;
|
||||||
@ -146,6 +150,8 @@ static void vio_init(Vio *vio, enum enum_vio_type type,
|
|||||||
vio->was_timeout =vio_was_timeout;
|
vio->was_timeout =vio_was_timeout;
|
||||||
vio->vioclose =vio_ssl_close;
|
vio->vioclose =vio_ssl_close;
|
||||||
vio->peer_addr =vio_peer_addr;
|
vio->peer_addr =vio_peer_addr;
|
||||||
|
vio->vioblocking =vio_ssl_blocking;
|
||||||
|
vio->is_blocking =vio_is_blocking;
|
||||||
vio->io_wait =vio_io_wait;
|
vio->io_wait =vio_io_wait;
|
||||||
vio->is_connected =vio_is_connected;
|
vio->is_connected =vio_is_connected;
|
||||||
vio->has_data =vio_ssl_has_data;
|
vio->has_data =vio_ssl_has_data;
|
||||||
@ -164,6 +170,8 @@ static void vio_init(Vio *vio, enum enum_vio_type type,
|
|||||||
vio->was_timeout =vio_was_timeout;
|
vio->was_timeout =vio_was_timeout;
|
||||||
vio->vioclose =vio_close;
|
vio->vioclose =vio_close;
|
||||||
vio->peer_addr =vio_peer_addr;
|
vio->peer_addr =vio_peer_addr;
|
||||||
|
vio->vioblocking =vio_blocking;
|
||||||
|
vio->is_blocking =vio_is_blocking;
|
||||||
vio->io_wait =vio_io_wait;
|
vio->io_wait =vio_io_wait;
|
||||||
vio->is_connected =vio_is_connected;
|
vio->is_connected =vio_is_connected;
|
||||||
vio->shutdown =vio_socket_shutdown;
|
vio->shutdown =vio_socket_shutdown;
|
||||||
|
@ -58,6 +58,7 @@ size_t vio_ssl_write(Vio *vio,const uchar* buf, size_t size);
|
|||||||
/* When the workday is over... */
|
/* When the workday is over... */
|
||||||
int vio_ssl_close(Vio *vio);
|
int vio_ssl_close(Vio *vio);
|
||||||
void vio_ssl_delete(Vio *vio);
|
void vio_ssl_delete(Vio *vio);
|
||||||
|
int vio_ssl_blocking(Vio *vio, my_bool set_blocking_mode, my_bool *old_mode);
|
||||||
my_bool vio_ssl_has_data(Vio *vio);
|
my_bool vio_ssl_has_data(Vio *vio);
|
||||||
|
|
||||||
#endif /* HAVE_OPENSSL */
|
#endif /* HAVE_OPENSSL */
|
||||||
|
10
vio/viossl.c
10
vio/viossl.c
@ -451,6 +451,16 @@ int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout, unsigned long *e
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int vio_ssl_blocking(Vio *vio __attribute__((unused)),
|
||||||
|
my_bool set_blocking_mode,
|
||||||
|
my_bool *old_mode)
|
||||||
|
{
|
||||||
|
/* Mode is always blocking */
|
||||||
|
*old_mode= 1;
|
||||||
|
/* Return error if we try to change to non_blocking mode */
|
||||||
|
return (set_blocking_mode ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
my_bool vio_ssl_has_data(Vio *vio)
|
my_bool vio_ssl_has_data(Vio *vio)
|
||||||
{
|
{
|
||||||
return SSL_pending(vio->ssl_arg) > 0 ? TRUE : FALSE;
|
return SSL_pending(vio->ssl_arg) > 0 ? TRUE : FALSE;
|
||||||
|
Reference in New Issue
Block a user