summaryrefslogtreecommitdiff
path: root/main/streams/xp_socket.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-11-26 12:30:17 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-11-30 15:06:28 +0100
commit24a19cc232668b5b839932a120d663b903729777 (patch)
tree25904cc1dfea23deedfca9b3abbbc73c48dc459d /main/streams/xp_socket.c
parenta0baa09b99adf4f65792e26a8af461a8fa4c97dc (diff)
downloadphp-git-24a19cc232668b5b839932a120d663b903729777.tar.gz
Suppress stream errors in mysqlnd
mysqlnd currently sets error_reporting=0 to suppress errors while writing to streams. Unfortunately these errors are still visible to userland error handlers, which is a source of confusion. See for example https://bugs.php.net/bug.php?id=80412. Instead add a stream flag that suppresses the emission of read/write errors in the first place, and set it in mysqlnd. I think it might be useful to have this option for userland as well in the future, but for now this is just an internal mechanism. Closes GH-6458.
Diffstat (limited to 'main/streams/xp_socket.c')
-rw-r--r--main/streams/xp_socket.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index f3370e89f7..a369bf5ff2 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -103,10 +103,13 @@ retry:
}
}
- estr = php_socket_strerror(err, NULL, 0);
- php_error_docref(NULL, E_NOTICE, "Send of " ZEND_LONG_FMT " bytes failed with errno=%d %s",
+ if (!(stream->flags & PHP_STREAM_FLAG_SUPPRESS_ERRORS)) {
+ estr = php_socket_strerror(err, NULL, 0);
+ php_error_docref(NULL, E_NOTICE,
+ "Send of " ZEND_LONG_FMT " bytes failed with errno=%d %s",
(zend_long)count, err, estr);
- efree(estr);
+ efree(estr);
+ }
}
if (didwrite > 0) {