From fed83e1b73d0b31cf8a5dd8b542e2d0d4cf352d0 Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Tue, 23 Dec 2003 21:14:27 +0000
Subject: [PATCH] Fix partition state read to deal with possible EINTR and
 errors better.

---
 src/slurmctld/partition_mgr.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/slurmctld/partition_mgr.c b/src/slurmctld/partition_mgr.c
index 9ffff62ea87..e0cb0bc7699 100644
--- a/src/slurmctld/partition_mgr.c
+++ b/src/slurmctld/partition_mgr.c
@@ -360,14 +360,16 @@ int load_all_part_state(void)
 	} else {
 		data_allocated = BUF_SIZE;
 		data = xmalloc(data_allocated);
-		while ((data_read =
-			read(state_fd, &data[data_size],
-			     BUF_SIZE)) == BUF_SIZE) {
-			data_size += data_read;
-			data_allocated += BUF_SIZE;
+		while (1) {
+			data_read = read(state_fd, &data[data_size], BUF_SIZE);
+			if ((data_read == -1) && (errno == EINTR))
+				continue;
+			if (data_read == 0)     /* eof */
+				break;
+			data_size      += data_read;
+			data_allocated += data_read;
 			xrealloc(data, data_allocated);
 		}
-		data_size += data_read;
 		close(state_fd);
 		if (data_read < 0)
 			error("Error reading file %s: %m", state_file);
-- 
GitLab