@@ -1133,6 +1133,7 @@ mongoc_stream_t* phongo_stream_initiator(const mongoc_uri_t *uri, const mongoc_h
11331133 struct timeval timeout = {0 , 0 };
11341134 struct timeval * timeoutp = NULL ;
11351135 char * uniqid ;
1136+ const char * persistent_id ;
11361137 phongo_char * errmsg = NULL ;
11371138 int errcode ;
11381139 char * dsn ;
@@ -1178,9 +1179,13 @@ mongoc_stream_t* phongo_stream_initiator(const mongoc_uri_t *uri, const mongoc_h
11781179
11791180 spprintf (& uniqid , 0 , "%s:%d[%s]" , host -> host , host -> port , mongoc_uri_get_string (uri ));
11801181
1182+ /* Do not persist SSL streams to avoid errors attempting to reinitialize SSL
1183+ * on subsequent requests (see: PHPC-720) */
1184+ persistent_id = mongoc_uri_get_ssl (uri ) ? NULL : uniqid ;
1185+
11811186 MONGOC_DEBUG ("Connecting to '%s'" , uniqid );
11821187 zend_replace_error_handling (EH_SUPPRESS , NULL , & error_handling TSRMLS_CC );
1183- stream = php_stream_xport_create (dsn , dsn_len , 0 , STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT , uniqid , timeoutp , (php_stream_context * )user_data , & errmsg , & errcode );
1188+ stream = php_stream_xport_create (dsn , dsn_len , 0 , STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT , persistent_id , timeoutp , (php_stream_context * )user_data , & errmsg , & errcode );
11841189 zend_restore_error_handling (& error_handling TSRMLS_CC );
11851190
11861191 if (!stream ) {
@@ -1200,7 +1205,7 @@ mongoc_stream_t* phongo_stream_initiator(const mongoc_uri_t *uri, const mongoc_h
12001205 if (mongoc_uri_get_ssl (uri )) {
12011206 zend_replace_error_handling (EH_THROW , php_phongo_sslconnectionexception_ce , & error_handling TSRMLS_CC );
12021207
1203- MONGOC_DEBUG ("Enabling SSL" );
1208+ MONGOC_DEBUG ("Enabling SSL (stream will not be persisted) " );
12041209
12051210 /* Capture the server certificate so we can do further verification */
12061211 if (PHP_STREAM_CONTEXT (stream )) {
@@ -1214,22 +1219,22 @@ mongoc_stream_t* phongo_stream_initiator(const mongoc_uri_t *uri, const mongoc_h
12141219 php_stream_free (stream , PHP_STREAM_FREE_CLOSE_PERSISTENT | PHP_STREAM_FREE_RSRC_DTOR );
12151220 bson_set_error (error , MONGOC_ERROR_STREAM , MONGOC_ERROR_STREAM_INVALID_TYPE , "Failed to setup crypto, is the OpenSSL extension loaded?" );
12161221 efree (dsn );
1217- return NULL ;
1222+ RETURN ( NULL ) ;
12181223 }
12191224
12201225 if (php_stream_xport_crypto_enable (stream , 1 TSRMLS_CC ) < 0 ) {
12211226 zend_restore_error_handling (& error_handling TSRMLS_CC );
12221227 php_stream_free (stream , PHP_STREAM_FREE_CLOSE_PERSISTENT | PHP_STREAM_FREE_RSRC_DTOR );
12231228 bson_set_error (error , MONGOC_ERROR_STREAM , MONGOC_ERROR_STREAM_INVALID_TYPE , "Failed to setup crypto, is the server running with SSL?" );
12241229 efree (dsn );
1225- return NULL ;
1230+ RETURN ( NULL ) ;
12261231 }
12271232
12281233 if (!php_phongo_ssl_verify (stream , host -> host , error TSRMLS_CC )) {
12291234 zend_restore_error_handling (& error_handling TSRMLS_CC );
12301235 php_stream_pclose (stream );
12311236 efree (dsn );
1232- return NULL ;
1237+ RETURN ( NULL ) ;
12331238 }
12341239
12351240 zend_restore_error_handling (& error_handling TSRMLS_CC );
0 commit comments