common:iobuf: Exclude cases with IOBUF_INPUT_TEMP/IOBUF_OUTPUT_TEMP.

* common/iobuf.c (iobuf_read): Handle a case with IOBUF_INPUT_TEMP.
(iobuf_write): Handle a case with IOBUF_OUTPUT_TEMP.

--

GnuPG-bug-id: 5941
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2022-04-25 17:37:32 +09:00
parent 2848fe4c84
commit 2fc91e15c6
1 changed files with 7 additions and 4 deletions

View File

@ -2177,7 +2177,8 @@ iobuf_read (iobuf_t a, void *buffer, unsigned int buflen)
a->e_d.len = 0; a->e_d.len = 0;
/* Hint for how full to fill iobuf internal drain buffer. */ /* Hint for how full to fill iobuf internal drain buffer. */
a->e_d.preferred = (buf && buflen >= IOBUF_ZEROCOPY_THRESHOLD_SIZE); a->e_d.preferred = (a->use != IOBUF_INPUT_TEMP)
&& (buf && buflen >= IOBUF_ZEROCOPY_THRESHOLD_SIZE);
n = 0; n = 0;
do do
@ -2200,7 +2201,7 @@ iobuf_read (iobuf_t a, void *buffer, unsigned int buflen)
underflow to read more data into the filter's internal underflow to read more data into the filter's internal
buffer. */ buffer. */
{ {
if (buf && n < buflen) if (a->use != IOBUF_INPUT_TEMP && buf && n < buflen)
{ {
/* Setup external drain buffer for faster moving of data /* Setup external drain buffer for faster moving of data
* (avoid memcpy). */ * (avoid memcpy). */
@ -2328,11 +2329,13 @@ iobuf_write (iobuf_t a, const void *buffer, unsigned int buflen)
a->e_d.len = 0; a->e_d.len = 0;
/* Hint for how full to fill iobuf internal drain buffer. */ /* Hint for how full to fill iobuf internal drain buffer. */
a->e_d.preferred = (buflen >= IOBUF_ZEROCOPY_THRESHOLD_SIZE); a->e_d.preferred = (a->use != IOBUF_OUTPUT_TEMP)
&& (buflen >= IOBUF_ZEROCOPY_THRESHOLD_SIZE);
do do
{ {
if (a->d.len == 0 && buflen >= IOBUF_ZEROCOPY_THRESHOLD_SIZE) if ((a->use != IOBUF_OUTPUT_TEMP)
&& a->d.len == 0 && buflen >= IOBUF_ZEROCOPY_THRESHOLD_SIZE)
{ {
/* Setup external drain buffer for faster moving of data /* Setup external drain buffer for faster moving of data
* (avoid memcpy). */ * (avoid memcpy). */