Commit 8dc5c95b authored by unknown's avatar unknown

Merge mysql.com:/home/jimw/my/mysql-4.1-clean

into  mysql.com:/home/jimw/my/mysql-5.0-clean


include/my_global.h:
  Auto merged
include/my_pthread.h:
  Auto merged
include/violite.h:
  Auto merged
mysql-test/r/ndb_autodiscover.result:
  Auto merged
ndb/src/mgmsrv/MgmtSrvr.cpp:
  Auto merged
ndb/src/ndbapi/SignalSender.cpp:
  Auto merged
sql-common/client.c:
  Auto merged
sql/examples/ha_archive.cc:
  Auto merged
sql/net_serv.cc:
  Auto merged
vio/vio.c:
  Auto merged
vio/viosocket.c:
  Auto merged
vio/viossl.c:
  Auto merged
configure.in:
  Resolve conflicts
parents 74aeffda accf5c26
This is a release of MySQL, a GPL (free) SQL database server (more This is a release of MySQL, a dual-license SQL database server.
licence information in the PUBLIC file and in the reference manual). MySQL is brought to you by the MySQL team at MySQL AB.
Please read the "Upgrading from..." section in the manual first, if you are License information can be found in these files:
migrating from older versions of MySQL! - For GPL (free) distributions, see the COPYING file.
- For commercial distributions, see the MySQLEULA.txt file.
The latest information about MySQL can be found at:
http://www.mysql.com
To see what it can do take a look at the features section in the For further information about MySQL or additional documentation, see:
manual. - The latest information about MySQL: http://www.mysql.com
- The current MySQL documentation: http:/dev.mysql.com/doc
For installation instructions see the Installation chapter in the Some manual sections of special interest:
manual.
For future plans see the TODO appendix in the manual. - If you are migrating from an older version of MySQL, please read the
"Upgrading from..." section first!
- To see what MySQL can do, take a look at the features section.
- For installation instructions, see the Installation chapter.
- For future plans, see the TODO appendix.
- For the new features/bugfix history, see the News appendix.
- For the currently known bugs/misfeatures (known errors) see the problems
appendix.
- For a list of developers and other contributors, see the Credits
appendix.
New features/bug fixes history is in the news appendix in the manual. A local copy of the MySQL Reference Manual can be found in the Docs
directory in GNU Info format. You can also browse the manual online or
For the currently known bugs/misfeatures (known errors) see the bugs download it in any of several formats at the URL given earlier in this
appendix in the manual. file.
For examples of SQL and benchmarking information see the bench
directory.
The manual mentioned above can be found in the Docs directory. The
manual is available in the following formats: as plain ASCII text in
Docs/manual.txt, in HTML format in Docs/manual_toc.html, as GNU Info in
Docs/mysql.info and as PostScript in Docs/manual.ps.
MySQL is brought to you by the MySQL team at MySQL AB
For a list of developers and other contributors, see the Credits appendix
in the manual.
************************************************************ ************************************************************
IMPORTANT: IMPORTANT:
Send bug (error) reports, questions and comments to the mailing list Bug or error reports should be sent to http://bugs.mysql.com.
at mysql@lists.mysql.com
Please use the 'mysqlbug' script when posting bug reports or questions
about MySQL. mysqlbug will gather some information about your system
and start your editor with a form in which you can describe your
problem. Bug reports might be silently ignored by the MySQL
maintainers if there is not a good reason included in the report as to
why mysqlbug has not been used. A report that says 'MySQL does not
work for me. Why?' is not considered a valid bug report.
The mysqlbug script can be found in the 'scripts' directory of the
distribution, that is '<where-you-installed-mysql>/scripts'.
...@@ -322,19 +322,19 @@ case "$target_os" in ...@@ -322,19 +322,19 @@ case "$target_os" in
;; ;;
esac esac
;; ;;
sysv5UnixWare*) sysv5UnixWare* | sysv5OpenUNIX8*)
if test "$GCC" != "yes"; then if test "$GCC" != "yes"; then
# We are using built-in inline function # Use the built-in alloca()
CFLAGS="$CFLAGS -Kalloca" CFLAGS="$CFLAGS -Kalloca"
fi fi
CXXFLAGS="$CXXFLAGS -DNO_CPLUSPLUS_ALLOCA" CXXFLAGS="$CXXFLAGS -DNO_CPLUSPLUS_ALLOCA"
;; ;;
sysv5OpenUNIX8*) sysv5SCO_SV6.0.0*)
if test "$GCC" != "yes"; then if test "$GCC" != "yes"; then
# We are using built-in inline function # Use the built-in alloca()
CFLAGS="$CFLAGS -Kalloca" CFLAGS="$CFLAGS -Kalloca"
CXXFLAGS="$CFLAGS -Kalloca"
fi fi
CXXFLAGS="$CXXFLAGS -DNO_CPLUSPLUS_ALLOCA"
;; ;;
esac esac
AC_SUBST(CC) AC_SUBST(CC)
...@@ -1047,6 +1047,15 @@ case $SYSTEM_TYPE in ...@@ -1047,6 +1047,15 @@ case $SYSTEM_TYPE in
MAX_C_OPTIMIZE="-O" MAX_C_OPTIMIZE="-O"
fi fi
;; ;;
*darwin9*)
if test "$ac_cv_prog_gcc" = "yes"
then
FLAGS="-D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT"
CFLAGS="$CFLAGS $FLAGS"
CXXFLAGS="$CXXFLAGS $FLAGS"
MAX_C_OPTIMIZE="-O"
fi
;;
*freebsd*) *freebsd*)
AC_MSG_WARN([Adding fix for interrupted reads]) AC_MSG_WARN([Adding fix for interrupted reads])
OSVERSION=`sysctl -a | grep osreldate | awk '{ print $2 }'` OSVERSION=`sysctl -a | grep osreldate | awk '{ print $2 }'`
...@@ -1359,8 +1368,6 @@ then ...@@ -1359,8 +1368,6 @@ then
if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null
then then
AC_DEFINE(HAVE_UNIXWARE7_THREADS, [1]) AC_DEFINE(HAVE_UNIXWARE7_THREADS, [1])
else
AC_DEFINE(HAVE_UNIXWARE7_POSIX, [1])
fi fi
AC_MSG_RESULT("yes") AC_MSG_RESULT("yes")
# We must have cc # We must have cc
...@@ -1386,87 +1393,40 @@ then ...@@ -1386,87 +1393,40 @@ then
AC_MSG_RESULT("no") AC_MSG_RESULT("no")
fi fi
fi fi
# Hack for SCO UnixWare7
#
if test "$with_named_thread" = "no"
then
AC_MSG_CHECKING("SCO UnixWare7 native threads")
if expr "$SYSTEM_TYPE" : ".*UnixWare*" > /dev/null
then
if test -f /usr/lib/libthread.so -o -f /usr/lib/libthreadT.so
then
MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK
if expr "$CC" : ".*gcc.*"
then
with_named_thread="-pthread -lsocket -lnsl"
else
with_named_thread="-Kthread -lsocket -lnsl"
fi
if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null
then
AC_DEFINE(HAVE_UNIXWARE7_THREADS, [1])
else
AC_DEFINE(HAVE_UNIXWARE7_POSIX, [1])
fi
# We must have cc
AC_MSG_CHECKING("for gcc")
if expr "$CC" : ".*gcc.*"
then
CC="$CC -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
CXX="$CXX -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
else
CC="$CC -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
CXX="$CXX -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
fi
AC_MSG_RESULT("yes")
else
AC_MSG_ERROR([configure: error: Can't find thread libs on SCO UnixWare7. See the Installation chapter in the Reference Manual.])
fi
else
AC_MSG_RESULT("no")
fi
fi
# Hack for Caldera OpenUNIX8 #
# Check for SCO threading libraries
# #
if test "$with_named_thread" = "no" if test "$with_named_thread" = "no"
then then
AC_MSG_CHECKING("OpenUNIX8 native threads") AC_MSG_CHECKING([SCO OpenServer 6, UnixWare 7 or OpenUNIX 8 native threads])
if expr "$SYSTEM_TYPE" : ".*OpenUNIX*" > /dev/null if expr "$SYSTEM_TYPE" : ".*UnixWare.*" > /dev/null || \
expr "$SYSTEM_TYPE" : ".*SCO_SV6.*" > /dev/null || \
expr "$SYSTEM_TYPE" : ".*OpenUNIX.*" > /dev/null
then then
if test -f /usr/lib/libthread.so -o -f /usr/lib/libthreadT.so if test -f /usr/lib/libthread.so -o -f /usr/lib/libthreadT.so
then then
MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK
if expr "$CC" : ".*gcc.*" if expr "$CC" : ".*gcc.*" > /dev/null
then then
with_named_thread="-pthread -lsocket -lnsl" with_named_thread="-pthread -lsocket -lnsl"
CC="$CC -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
CXX="$CXX -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
else else
with_named_thread="-Kthread -lsocket -lnsl" with_named_thread="-Kthread -lsocket -lnsl"
CC="$CC -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
CXX="$CXX -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
fi fi
if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null
then then
AC_DEFINE([HAVE_UNIXWARE7_THREADS], [1], AC_DEFINE(HAVE_UNIXWARE7_THREADS, [1], [Have UnixWare 7 (or similar) almost-POSIX threading library])
[UNIXWARE7 threads are not posix])
else
AC_DEFINE([HAVE_UNIXWARE7_POSIX], [1],
[new UNIXWARE7 threads that are not yet posix])
fi fi
# We must have cc AC_MSG_RESULT(yes)
AC_MSG_CHECKING("for gcc")
if expr "$CC" : ".*gcc.*"
then
CC="$CC -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
CXX="$CXX -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
else
CC="$CC -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
CXX="$CXX -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK"
fi
AC_MSG_RESULT("yes")
else else
AC_MSG_ERROR([configure: error: Can't find thread libs on Caldera OpenUNIX 8. See the Installation chapter in the Reference Manual.]) AC_MSG_ERROR([configure: error: Can't find thread library on SCO/Caldera system. See the Installation chapter in the Reference Manual.])
fi fi
else else
AC_MSG_RESULT("no") AC_MSG_RESULT(no)
fi fi
fi fi
...@@ -2508,7 +2468,7 @@ then ...@@ -2508,7 +2468,7 @@ then
AC_CONFIG_FILES(bdb/Makefile) AC_CONFIG_FILES(bdb/Makefile)
echo "CONFIGURING FOR BERKELEY DB" echo "CONFIGURING FOR BERKELEY DB"
bdb_conf_flags="--disable-shared" bdb_conf_flags="--disable-shared --build=$build_alias"
if test $with_debug = "yes" if test $with_debug = "yes"
then then
bdb_conf_flags="$bdb_conf_flags --enable-debug --enable-diagnostic" bdb_conf_flags="$bdb_conf_flags --enable-debug --enable-diagnostic"
......
...@@ -834,6 +834,7 @@ typedef off_t os_off_t; ...@@ -834,6 +834,7 @@ typedef off_t os_off_t;
#define socket_errno WSAGetLastError() #define socket_errno WSAGetLastError()
#define SOCKET_EINTR WSAEINTR #define SOCKET_EINTR WSAEINTR
#define SOCKET_EAGAIN WSAEINPROGRESS #define SOCKET_EAGAIN WSAEINPROGRESS
#define SOCKET_ETIMEDOUT WSAETIMEDOUT
#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK #define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
#define SOCKET_ENFILE ENFILE #define SOCKET_ENFILE ENFILE
#define SOCKET_EMFILE EMFILE #define SOCKET_EMFILE EMFILE
...@@ -841,6 +842,7 @@ typedef off_t os_off_t; ...@@ -841,6 +842,7 @@ typedef off_t os_off_t;
#define socket_errno sock_errno() #define socket_errno sock_errno()
#define SOCKET_EINTR SOCEINTR #define SOCKET_EINTR SOCEINTR
#define SOCKET_EAGAIN SOCEINPROGRESS #define SOCKET_EAGAIN SOCEINPROGRESS
#define SOCKET_ETIMEDOUT SOCKET_EINTR
#define SOCKET_EWOULDBLOCK SOCEWOULDBLOCK #define SOCKET_EWOULDBLOCK SOCEWOULDBLOCK
#define SOCKET_ENFILE SOCENFILE #define SOCKET_ENFILE SOCENFILE
#define SOCKET_EMFILE SOCEMFILE #define SOCKET_EMFILE SOCEMFILE
...@@ -850,6 +852,7 @@ typedef off_t os_off_t; ...@@ -850,6 +852,7 @@ typedef off_t os_off_t;
#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_ENFILE ENFILE #define SOCKET_ENFILE ENFILE
#define SOCKET_EMFILE EMFILE #define SOCKET_EMFILE EMFILE
......
...@@ -298,11 +298,6 @@ extern int my_pthread_create_detached; ...@@ -298,11 +298,6 @@ extern int my_pthread_create_detached;
int sigwait(sigset_t *set, int *sig); int sigwait(sigset_t *set, int *sig);
#endif #endif
#if defined(HAVE_UNIXWARE7_POSIX)
#undef HAVE_NONPOSIX_SIGWAIT
#define HAVE_NONPOSIX_SIGWAIT /* sigwait takes only 1 argument */
#endif
#ifndef HAVE_NONPOSIX_SIGWAIT #ifndef HAVE_NONPOSIX_SIGWAIT
#define my_sigwait(A,B) sigwait((A),(B)) #define my_sigwait(A,B) sigwait((A),(B))
#else #else
......
...@@ -74,6 +74,8 @@ int vio_fastsend(Vio *vio); ...@@ -74,6 +74,8 @@ int vio_fastsend(Vio *vio);
int vio_keepalive(Vio *vio, my_bool onoff); int vio_keepalive(Vio *vio, my_bool onoff);
/* Whenever we should retry the last read/write operation. */ /* Whenever we should retry the last read/write operation. */
my_bool vio_should_retry(Vio *vio); my_bool vio_should_retry(Vio *vio);
/* Check that operation was timed out */
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 */
...@@ -153,6 +155,7 @@ int vio_close_shared_memory(Vio * vio); ...@@ -153,6 +155,7 @@ int vio_close_shared_memory(Vio * vio);
#define vio_fastsend(vio) (vio)->fastsend(vio) #define vio_fastsend(vio) (vio)->fastsend(vio)
#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_interrupted(vio) (vio)->was_interrupted(vio)
#define vio_close(vio) ((vio)->vioclose)(vio) #define vio_close(vio) ((vio)->vioclose)(vio)
#define vio_peer_addr(vio, buf, prt) (vio)->peer_addr(vio, buf, prt) #define vio_peer_addr(vio, buf, prt) (vio)->peer_addr(vio, buf, prt)
#define vio_in_addr(vio, in) (vio)->in_addr(vio, in) #define vio_in_addr(vio, in) (vio)->in_addr(vio, in)
...@@ -198,6 +201,7 @@ struct st_vio ...@@ -198,6 +201,7 @@ struct st_vio
my_bool (*peer_addr)(Vio*, char *, uint16*); my_bool (*peer_addr)(Vio*, char *, uint16*);
void (*in_addr)(Vio*, struct in_addr*); void (*in_addr)(Vio*, struct in_addr*);
my_bool (*should_retry)(Vio*); my_bool (*should_retry)(Vio*);
my_bool (*was_interrupted)(Vio*);
int (*vioclose)(Vio*); int (*vioclose)(Vio*);
void (*timeout)(Vio*, unsigned int which, unsigned int timeout); void (*timeout)(Vio*, unsigned int which, unsigned int timeout);
void *ssl_arg; void *ssl_arg;
......
...@@ -99,6 +99,8 @@ id int not null primary key, ...@@ -99,6 +99,8 @@ id int not null primary key,
id2 int not null, id2 int not null,
name char(20) name char(20)
) engine=ndb; ) engine=ndb;
Warnings:
Note 1050 Table 't3' already exists
show status like 'handler_discover%'; show status like 'handler_discover%';
Variable_name Value Variable_name Value
Handler_discover 0 Handler_discover 0
......
...@@ -2521,10 +2521,7 @@ MgmtSrvr::startBackup(Uint32& backupId, int waitCompleted) ...@@ -2521,10 +2521,7 @@ MgmtSrvr::startBackup(Uint32& backupId, int waitCompleted)
case GSN_NODE_FAILREP:{ case GSN_NODE_FAILREP:{
const NodeFailRep * const rep = const NodeFailRep * const rep =
CAST_CONSTPTR(NodeFailRep, signal->getDataPtr()); CAST_CONSTPTR(NodeFailRep, signal->getDataPtr());
#ifdef VM_TRACE if (NodeBitmask::get(rep->theNodes,nodeId) ||
ndbout_c("Node %d failed", rep->failNo);
#endif
if (rep->failNo == nodeId ||
waitCompleted == 1) waitCompleted == 1)
return 1326; return 1326;
// wait for next signal // wait for next signal
......
...@@ -250,14 +250,22 @@ SignalSender::execNodeStatus(void* signalSender, ...@@ -250,14 +250,22 @@ SignalSender::execNodeStatus(void* signalSender,
// node shutdown complete // node shutdown complete
s->header.theVerId_signalNumber = GSN_NF_COMPLETEREP; s->header.theVerId_signalNumber = GSN_NF_COMPLETEREP;
NFCompleteRep *rep = (NFCompleteRep *)s->getDataPtrSend(); NFCompleteRep *rep = (NFCompleteRep *)s->getDataPtrSend();
rep->blockNo = 0;
rep->nodeId = 0;
rep->failedNodeId = nodeId; rep->failedNodeId = nodeId;
rep->unused = 0;
rep->from = 0;
} }
else else
{ {
// node failure // node failure
s->header.theVerId_signalNumber = GSN_NODE_FAILREP; s->header.theVerId_signalNumber = GSN_NODE_FAILREP;
NodeFailRep *rep = (NodeFailRep *)s->getDataPtrSend(); NodeFailRep *rep = (NodeFailRep *)s->getDataPtrSend();
rep->failNo = nodeId; rep->failNo = 0;
rep->masterNodeId = 0;
rep->noOfNodes = 1;
NodeBitmask::clear(rep->theNodes);
NodeBitmask::set(rep->theNodes,nodeId);
} }
ss->m_jobBuffer.push_back(s); ss->m_jobBuffer.push_back(s);
......
...@@ -599,7 +599,7 @@ net_safe_read(MYSQL *mysql) ...@@ -599,7 +599,7 @@ net_safe_read(MYSQL *mysql)
DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d", DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d",
vio_description(net->vio),len)); vio_description(net->vio),len));
#ifdef MYSQL_SERVER #ifdef MYSQL_SERVER
if (vio_errno(net->vio) == SOCKET_EINTR) if (vio_was_interrupted(net->vio))
return (packet_error); return (packet_error);
#endif /*MYSQL_SERVER*/ #endif /*MYSQL_SERVER*/
end_server(mysql); end_server(mysql);
......
...@@ -544,7 +544,7 @@ int ha_archive::create(const char *name, TABLE *table_arg, ...@@ -544,7 +544,7 @@ int ha_archive::create(const char *name, TABLE *table_arg,
error= my_errno; error= my_errno;
goto error; goto error;
} }
if ((archive= gzdopen(create_file, "ab")) == NULL) if ((archive= gzdopen(create_file, "wb")) == NULL)
{ {
error= errno; error= errno;
goto error2; goto error2;
......
...@@ -763,7 +763,7 @@ my_real_read(NET *net, ulong *complen) ...@@ -763,7 +763,7 @@ my_real_read(NET *net, ulong *complen)
net->error= 2; /* Close socket */ net->error= 2; /* Close socket */
net->report_error= 1; net->report_error= 1;
#ifdef MYSQL_SERVER #ifdef MYSQL_SERVER
net->last_errno= (interrupted ? ER_NET_READ_INTERRUPTED : net->last_errno= (vio_was_interrupted(net->vio) ? ER_NET_READ_INTERRUPTED :
ER_NET_READ_ERROR); ER_NET_READ_ERROR);
#endif #endif
goto end; goto end;
......
...@@ -54,6 +54,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type, ...@@ -54,6 +54,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_fastsend; vio->fastsend =vio_fastsend;
vio->viokeepalive =vio_keepalive; vio->viokeepalive =vio_keepalive;
vio->should_retry =vio_should_retry; vio->should_retry =vio_should_retry;
vio->was_interrupted=vio_was_interrupted;
vio->vioclose =vio_close_pipe; vio->vioclose =vio_close_pipe;
vio->peer_addr =vio_peer_addr; vio->peer_addr =vio_peer_addr;
vio->in_addr =vio_in_addr; vio->in_addr =vio_in_addr;
...@@ -73,6 +74,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type, ...@@ -73,6 +74,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_fastsend; vio->fastsend =vio_fastsend;
vio->viokeepalive =vio_keepalive; vio->viokeepalive =vio_keepalive;
vio->should_retry =vio_should_retry; vio->should_retry =vio_should_retry;
vio->was_interrupted=vio_was_interrupted;
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->in_addr =vio_in_addr; vio->in_addr =vio_in_addr;
...@@ -92,6 +94,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type, ...@@ -92,6 +94,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_ssl_fastsend; vio->fastsend =vio_ssl_fastsend;
vio->viokeepalive =vio_ssl_keepalive; vio->viokeepalive =vio_ssl_keepalive;
vio->should_retry =vio_ssl_should_retry; vio->should_retry =vio_ssl_should_retry;
vio->was_interrupted=vio_ssl_was_interrupted;
vio->vioclose =vio_ssl_close; vio->vioclose =vio_ssl_close;
vio->peer_addr =vio_ssl_peer_addr; vio->peer_addr =vio_ssl_peer_addr;
vio->in_addr =vio_ssl_in_addr; vio->in_addr =vio_ssl_in_addr;
...@@ -109,6 +112,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type, ...@@ -109,6 +112,7 @@ static void vio_init(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_fastsend; vio->fastsend =vio_fastsend;
vio->viokeepalive =vio_keepalive; vio->viokeepalive =vio_keepalive;
vio->should_retry =vio_should_retry; vio->should_retry =vio_should_retry;
vio->was_interrupted=vio_was_interrupted;
vio->vioclose =vio_close; vio->vioclose =vio_close;
vio->peer_addr =vio_peer_addr; vio->peer_addr =vio_peer_addr;
vio->in_addr =vio_in_addr; vio->in_addr =vio_in_addr;
......
...@@ -39,6 +39,8 @@ int vio_ssl_fastsend(Vio *vio); ...@@ -39,6 +39,8 @@ int vio_ssl_fastsend(Vio *vio);
int vio_ssl_keepalive(Vio *vio, my_bool onoff); int vio_ssl_keepalive(Vio *vio, my_bool onoff);
/* Whenever we should retry the last read/write operation. */ /* Whenever we should retry the last read/write operation. */
my_bool vio_ssl_should_retry(Vio *vio); my_bool vio_ssl_should_retry(Vio *vio);
/* Check that operation was timed out */
my_bool vio_ssl_was_interrupted(Vio *vio);
/* When the workday is over... */ /* When the workday is over... */
int vio_ssl_close(Vio *vio); int vio_ssl_close(Vio *vio);
/* Return last error number */ /* Return last error number */
......
...@@ -242,6 +242,15 @@ vio_should_retry(Vio * vio __attribute__((unused))) ...@@ -242,6 +242,15 @@ vio_should_retry(Vio * vio __attribute__((unused)))
} }
my_bool
vio_was_interrupted(Vio *vio __attribute__((unused)))
{
int en= socket_errno;
return (en == SOCKET_EAGAIN || en == SOCKET_EINTR ||
en == SOCKET_EWOULDBLOCK || en == SOCKET_ETIMEDOUT);
}
int vio_close(Vio * vio) int vio_close(Vio * vio)
{ {
int r=0; int r=0;
......
...@@ -184,6 +184,15 @@ vio_ssl_should_retry(Vio * vio __attribute__((unused))) ...@@ -184,6 +184,15 @@ vio_ssl_should_retry(Vio * vio __attribute__((unused)))
} }
my_bool
vio_ssl_was_interrupted(Vio *vio __attribute__((unused)))
{
int en= socket_errno;
return (en == SOCKET_EAGAIN || en == SOCKET_EINTR ||
en == SOCKET_EWOULDBLOCK || en == SOCKET_ETIMEDOUT);
}
int vio_ssl_close(Vio * vio) int vio_ssl_close(Vio * vio)
{ {
int r; int r;
......
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