From 277c8c4c9b39a2d26fd8dbd30281dfb5c0de483d Mon Sep 17 00:00:00 2001 From: Roman Bolshakov Date: Wed, 21 Aug 2019 16:33:18 +0300 Subject: [PATCH] tools: console: Relax stream EOF handling Regular VM shutdown triggers the error for existing session of virsh console and it returns with non-zero exit code: error: internal error: console stream EOF The message and status code are misleading because there's no real error. virStreamRecv returns 0 correctly when EOF is reached. Existing implementations of esx, fd, and remote streams behave the same for virStreamFinish and virStreamAbort: they close the stream. So, we can continue to use virStreamAbort to handle EOF and errors from virStreamRecv but additonally we can report error if virStreamAbort fails. Fixes: 29f2b5248c6 ("tools: console: pass stream/fd errors to user") Signed-off-by: Roman Bolshakov Reviewed-by: Daniel Henrique Barboza Tested-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- tools/virsh-console.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tools/virsh-console.c b/tools/virsh-console.c index e16f841e57..a235a9a283 100644 --- a/tools/virsh-console.c +++ b/tools/virsh-console.c @@ -106,7 +106,9 @@ virConsoleShutdown(virConsolePtr con) if (con->st) { virStreamEventRemoveCallback(con->st); - virStreamAbort(con->st); + if (virStreamAbort(con->st) < 0) + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("cannot terminate console stream")); virStreamFree(con->st); con->st = NULL; } @@ -172,10 +174,6 @@ virConsoleEventOnStream(virStreamPtr st, if (got == -2) goto cleanup; /* blocking */ if (got <= 0) { - if (got == 0) - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("console stream EOF")); - virConsoleShutdown(con); goto cleanup; }