51 lines
1.7 KiB
Diff
51 lines
1.7 KiB
Diff
|
|
From f2f21f4f7a5f0fdf43fa957f0628045ed373a025 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
|
||
|
|
Date: Thu, 24 Sep 2020 15:47:09 +0300
|
||
|
|
Subject: [PATCH 036/108] logging: read all bytes on EOF in event handler
|
||
|
|
|
||
|
|
If writing side writes enough bytes to the pipe and closes writing
|
||
|
|
end then we got both VIR_EVENT_HANDLE_HANGUP and VIR_EVENT_HANDLE_READ
|
||
|
|
in handler. Currently in this situation handler reads 1024 bytes
|
||
|
|
and finish reading leaving unread data in pipe.
|
||
|
|
|
||
|
|
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
|
||
|
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||
|
|
(cherry picked from commit 7c0e1a8631773788a96702252931541290288ef6)
|
||
|
|
---
|
||
|
|
src/logging/log_handler.c | 7 +++----
|
||
|
|
1 file changed, 3 insertions(+), 4 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c
|
||
|
|
index 3cc197a396..00fca7b653 100644
|
||
|
|
--- a/src/logging/log_handler.c
|
||
|
|
+++ b/src/logging/log_handler.c
|
||
|
|
@@ -138,7 +138,7 @@ virLogHandlerGetLogFileFromWatch(virLogHandlerPtr handler,
|
||
|
|
static void
|
||
|
|
virLogHandlerDomainLogFileEvent(int watch,
|
||
|
|
int fd,
|
||
|
|
- int events,
|
||
|
|
+ int events G_GNUC_UNUSED,
|
||
|
|
void *opaque)
|
||
|
|
{
|
||
|
|
virLogHandlerPtr handler = opaque;
|
||
|
|
@@ -168,14 +168,13 @@ virLogHandlerDomainLogFileEvent(int watch,
|
||
|
|
virReportSystemError(errno, "%s",
|
||
|
|
_("Unable to read from log pipe"));
|
||
|
|
goto error;
|
||
|
|
+ } else if (len == 0) {
|
||
|
|
+ goto error;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (virRotatingFileWriterAppend(logfile->file, buf, len) != len)
|
||
|
|
goto error;
|
||
|
|
|
||
|
|
- if (events & VIR_EVENT_HANDLE_HANGUP)
|
||
|
|
- goto error;
|
||
|
|
-
|
||
|
|
cleanup:
|
||
|
|
virObjectUnlock(handler);
|
||
|
|
return;
|
||
|
|
--
|
||
|
|
2.33.0
|
||
|
|
|