diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-26 12:30:17 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-30 15:06:28 +0100 |
commit | 24a19cc232668b5b839932a120d663b903729777 (patch) | |
tree | 25904cc1dfea23deedfca9b3abbbc73c48dc459d /main/streams/xp_socket.c | |
parent | a0baa09b99adf4f65792e26a8af461a8fa4c97dc (diff) | |
download | php-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.c | 9 |
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) { |