Skip to content

Commit 139af35

Browse files
committed
Add a method for checking if the underlying stream is valid.
1 parent 671be5b commit 139af35

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

ext/mysqlnd/mysqlnd_structs.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,8 @@ typedef enum_func_status (*func_mysqlnd_vio__connect)(MYSQLND_VIO * const vio, c
318318
typedef void (*func_mysqlnd_vio__close_stream)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
319319
typedef php_stream * (*func_mysqlnd_vio__open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
320320
typedef php_stream * (*func_mysqlnd_vio__get_stream)(const MYSQLND_VIO * const vio);
321-
typedef php_stream * (*func_mysqlnd_vio__set_stream)(MYSQLND_VIO * const vio, php_stream * vio_stream);
321+
typedef enum_func_status (*func_mysqlnd_vio__set_stream)(MYSQLND_VIO * const vio, php_stream * vio_stream);
322+
typedef zend_bool (*func_mysqlnd_vio__has_valid_stream)(const MYSQLND_VIO * const vio);
322323
typedef func_mysqlnd_vio__open_stream (*func_mysqlnd_vio__get_open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_ERROR_INFO * const error_info);
323324

324325
typedef enum_func_status (*func_mysqlnd_vio__set_client_option)(MYSQLND_VIO * const vio, enum_mysqlnd_client_option option, const char * const value);
@@ -346,6 +347,7 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio)
346347

347348
func_mysqlnd_vio__get_stream get_stream;
348349
func_mysqlnd_vio__set_stream set_stream;
350+
func_mysqlnd_vio__has_valid_stream has_valid_stream;
349351
func_mysqlnd_vio__get_open_stream get_open_stream;
350352

351353
func_mysqlnd_vio__set_client_option set_client_option;

ext/mysqlnd/mysqlnd_vio.c

+22-12
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ mysqlnd_set_sock_keepalive(php_stream * stream)
7474
/* {{{ mysqlnd_vio::network_read */
7575
static enum_func_status
7676
MYSQLND_METHOD(mysqlnd_vio, network_read)(MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count,
77-
MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info)
77+
MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info)
7878
{
7979
enum_func_status return_value = PASS;
8080
php_stream * net_stream = vio->data->m.get_stream(vio);
@@ -105,7 +105,7 @@ MYSQLND_METHOD(mysqlnd_vio, network_read)(MYSQLND_VIO * const vio, zend_uchar *
105105
/* {{{ mysqlnd_vio::network_write */
106106
static size_t
107107
MYSQLND_METHOD(mysqlnd_vio, network_write)(MYSQLND_VIO * const vio, const zend_uchar * const buffer, const size_t count,
108-
MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info)
108+
MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info)
109109
{
110110
size_t ret;
111111
DBG_ENTER("mysqlnd_vio::network_write");
@@ -318,8 +318,7 @@ MYSQLND_METHOD(mysqlnd_vio, connect)(MYSQLND_VIO * const vio, const MYSQLND_CSTR
318318
open_stream = vio->data->m.get_open_stream(vio, scheme, error_info);
319319
if (open_stream) {
320320
php_stream * net_stream = open_stream(vio, scheme, persistent, conn_stats, error_info);
321-
if (net_stream) {
322-
(void) vio->data->m.set_stream(vio, net_stream);
321+
if (net_stream && PASS == vio->data->m.set_stream(vio, net_stream)) {
323322
vio->data->m.post_connect_set_opt(vio, scheme, conn_stats, error_info);
324323
ret = PASS;
325324
}
@@ -676,7 +675,7 @@ MYSQLND_METHOD(mysqlnd_vio, close_stream)(MYSQLND_VIO * const net, MYSQLND_STATS
676675
} else {
677676
php_stream_free(net_stream, PHP_STREAM_FREE_CLOSE);
678677
}
679-
(void) net->data->m.set_stream(net, NULL);
678+
net->data->m.set_stream(net, NULL);
680679
}
681680

682681
DBG_VOID_RETURN;
@@ -731,16 +730,26 @@ MYSQLND_METHOD(mysqlnd_vio, get_stream)(const MYSQLND_VIO * const net)
731730

732731

733732
/* {{{ mysqlnd_vio::set_stream */
734-
static php_stream *
735-
MYSQLND_METHOD(mysqlnd_vio, set_stream)(MYSQLND_VIO * const net, php_stream * net_stream)
733+
static enum_func_status
734+
MYSQLND_METHOD(mysqlnd_vio, set_stream)(MYSQLND_VIO * const vio, php_stream * net_stream)
736735
{
737-
php_stream * ret = NULL;
738736
DBG_ENTER("mysqlnd_vio::set_stream");
739-
if (net) {
740-
net->data->stream = net_stream;
741-
ret = net->data->stream;
737+
if (vio) {
738+
vio->data->stream = net_stream;
739+
DBG_RETURN(PASS);
742740
}
743-
DBG_RETURN(ret);
741+
DBG_RETURN(FAIL);
742+
}
743+
/* }}} */
744+
745+
746+
/* {{{ mysqlnd_vio::has_valid_stream */
747+
static zend_bool
748+
MYSQLND_METHOD(mysqlnd_vio, has_valid_stream)(const MYSQLND_VIO * const vio)
749+
{
750+
DBG_ENTER("mysqlnd_vio::has_valid_stream");
751+
DBG_INF_FMT("%p %p", vio, vio? vio->data->stream:NULL);
752+
DBG_RETURN((vio && vio->data->stream)? TRUE: FALSE);
744753
}
745754
/* }}} */
746755

@@ -757,6 +766,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_vio)
757766

758767
MYSQLND_METHOD(mysqlnd_vio, get_stream),
759768
MYSQLND_METHOD(mysqlnd_vio, set_stream),
769+
MYSQLND_METHOD(mysqlnd_vio, has_valid_stream),
760770
MYSQLND_METHOD(mysqlnd_vio, get_open_stream),
761771

762772
MYSQLND_METHOD(mysqlnd_vio, set_client_option),

0 commit comments

Comments
 (0)