diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-07-31 18:09:08 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-07-31 18:09:08 +0300 |
commit | 9216114ce729733e6b0c4ce952bfdf57595ff387 (patch) | |
tree | 7a541ed87a6a8174d3d94c5f780724a34e08dc1c /vio | |
parent | dc513dff911d72eaaf9f752f390fef8d1ef9a4b0 (diff) | |
parent | 66ec3a770f7854f500ece66c78f3c87c9cd6da15 (diff) | |
download | mariadb-git-9216114ce729733e6b0c4ce952bfdf57595ff387.tar.gz |
Merge 10.3 into 10.4
Diffstat (limited to 'vio')
-rw-r--r-- | vio/vio_priv.h | 1 | ||||
-rw-r--r-- | vio/viopipe.c | 6 | ||||
-rw-r--r-- | vio/viosocket.c | 29 |
3 files changed, 27 insertions, 9 deletions
diff --git a/vio/vio_priv.h b/vio/vio_priv.h index 9b68624a811..3a0f826e7e8 100644 --- a/vio/vio_priv.h +++ b/vio/vio_priv.h @@ -33,6 +33,7 @@ my_bool vio_is_connected_pipe(Vio *vio); int vio_close_pipe(Vio * vio); int cancel_io(HANDLE handle, DWORD thread_id); int vio_shutdown_pipe(Vio *vio,int how); +uint vio_pending_pipe(Vio* vio); #endif diff --git a/vio/viopipe.c b/vio/viopipe.c index 6db0944d8df..567884807fe 100644 --- a/vio/viopipe.c +++ b/vio/viopipe.c @@ -140,5 +140,11 @@ int vio_close_pipe(Vio *vio) DBUG_RETURN(ret); } +/* return number of bytes readable from pipe.*/ +uint vio_pending_pipe(Vio *vio) +{ + DWORD bytes; + return PeekNamedPipe(vio->hPipe, NULL, 0, NULL, &bytes, NULL) ? bytes : 0; +} #endif diff --git a/vio/viosocket.c b/vio/viosocket.c index aedcf01b455..0820176371d 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -1232,7 +1232,6 @@ my_bool vio_is_connected(Vio *vio) DBUG_RETURN(bytes ? TRUE : FALSE); } -#ifndef DBUG_OFF /** Number of bytes in the read or socket buffer @@ -1251,22 +1250,34 @@ ssize_t vio_pending(Vio *vio) return vio->read_end - vio->read_pos; /* Skip non-socket based transport types. */ - if (vio->type == VIO_TYPE_TCPIP || vio->type == VIO_TYPE_SOCKET) + switch (vio->type) { + case VIO_TYPE_TCPIP: + /* fallthrough */ + case VIO_TYPE_SOCKET: /* Obtain number of readable bytes in the socket buffer. */ if (socket_peek_read(vio, &bytes)) return -1; - } + return bytes; - /* - SSL not checked due to a yaSSL bug in SSL_pending that - causes it to attempt to read from the socket. - */ + case VIO_TYPE_SSL: + bytes= (uint) SSL_pending(vio->ssl_arg); + if (bytes) + return bytes; + if (socket_peek_read(vio, &bytes)) + return -1; + return bytes; - return (ssize_t) bytes; +#ifdef _WIN32 + case VIO_TYPE_NAMEDPIPE: + bytes= vio_pending_pipe(vio); + return bytes; +#endif + default: + return -1; + } } -#endif /* DBUG_OFF */ /** Checks if the error code, returned by vio_getnameinfo(), means it was the |