diff --git a/src/slurmctld/state_save.c b/src/slurmctld/state_save.c index 4ba689ca9d455f1fa97d095d6f164172427ab5ec..a6c893b7b83dc72a7063a45f759be5b06c3e1d5c 100644 --- a/src/slurmctld/state_save.c +++ b/src/slurmctld/state_save.c @@ -61,23 +61,27 @@ static bool run_save_thread = true; * RET 0 on success or -1 on error */ extern int fsync_and_close(int fd, char *file_type) { - int rc = 0; - int retval; + int rc = 0, retval, pos; - while ((retval = fsync(fd)) && (errno == EINTR)) - ; - if (retval != 0) { - rc = retval; - error("fsync() error writing %s state save file: %m", - file_type); + for (retval = 1, pos = 1; retval && pos < 4; pos++) { + retval = fsync(fd); + if (retval && (errno != EINTR)) { + error("fsync() error writing %s state save file: %m", + file_type); + } } - - while ((retval = close(fd)) && (errno == EINTR)) - ; - if (retval != 0) { + if (retval) rc = retval; - error("close () error on %s state save file: %m", file_type); + + for (retval = 1, pos = 1; retval && pos < 4; pos++) { + retval = close(fd); + if (retval && (errno != EINTR)) { + error("close () error on %s state save file: %m", + file_type); + } } + if (retval) + rc = retval; return rc; }