cc1648ef0c
"plugins/open: Fix for interrupted select" Preparation for applying patch 51634fd77c836e3cb5acd9b9b72e7ede20321d56 Related: rhbz2224569
34 lines
1.2 KiB
Diff
34 lines
1.2 KiB
Diff
From f222df3081d965051be76b85ea52b4aff222edf1 Mon Sep 17 00:00:00 2001
|
|
From: "William A. Kennington III" <wak@google.com>
|
|
Date: Fri, 15 Jun 2018 14:47:12 -0700
|
|
Subject: [PATCH] plugins/open: Fix for interrupted select
|
|
|
|
The select syscall can be interrupted for signals like SIGPROF. The IPMI
|
|
command sent will still be outstanding but the send_command will return
|
|
an error. When the next command is sent it will get the completion for
|
|
the previous command and has the tendency to break state of end users.
|
|
|
|
Signed-off-by: William A. Kennington III <wak@google.com>
|
|
---
|
|
src/plugins/open/open.c | 4 +++-
|
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/plugins/open/open.c b/src/plugins/open/open.c
|
|
index 5beeac7..59b736d 100644
|
|
--- a/src/plugins/open/open.c
|
|
+++ b/src/plugins/open/open.c
|
|
@@ -335,7 +335,9 @@ ipmi_openipmi_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req)
|
|
FD_SET(intf->fd, &rset);
|
|
read_timeout.tv_sec = IPMI_OPENIPMI_READ_TIMEOUT;
|
|
read_timeout.tv_usec = 0;
|
|
- retval = select(intf->fd+1, &rset, NULL, NULL, &read_timeout);
|
|
+ do {
|
|
+ retval = select(intf->fd+1, &rset, NULL, NULL, &read_timeout);
|
|
+ } while (retval < 0 && errno == EINTR);
|
|
if (retval < 0) {
|
|
lperror(LOG_ERR, "I/O Error");
|
|
if (data != NULL) {
|
|
--
|
|
2.40.1
|
|
|