From 6d7f260f92329d394ece7447e58a46cd26d9a5a9 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Tue, 19 Aug 2014 14:20:22 +0200 Subject: [PATCH] dmeventd: fix test for select return value Do not call read when select return -1 && EINTR. Also check for return valuer from read() and abort write function when unexpected error happens. --- daemons/dmeventd/libdevmapper-event.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/daemons/dmeventd/libdevmapper-event.c b/daemons/dmeventd/libdevmapper-event.c index 6b7338fba..6e41b0a12 100644 --- a/daemons/dmeventd/libdevmapper-event.c +++ b/daemons/dmeventd/libdevmapper-event.c @@ -297,13 +297,21 @@ static int _daemon_write(struct dm_event_fifos *fifos, FD_ZERO(&fds); FD_SET(fifos->server, &fds); ret = select(fifos->server + 1, &fds, NULL, NULL, &tval); - if ((ret < 0) && (errno != EINTR)) { + if (ret < 0) { + if (errno == EINTR) + continue; log_error("Unable to talk to event daemon"); return 0; } if (ret == 0) break; ret = read(fifos->server, drainbuf, sizeof(drainbuf)); + if (ret < 0) { + if ((errno == EINTR) || (errno == EAGAIN)) + continue; + log_error("Unable to talk to event daemon"); + return 0; + } } while (bytes < size) {