diff -ur make-3.80rc1.orig/commands.c make-3.80rc1/commands.c --- make-3.80rc1.orig/commands.c Tue Jul 9 00:54:08 2002 +++ make-3.80rc1/commands.c Mon Jul 15 15:34:30 2002 @@ -512,7 +512,7 @@ } #endif - if (stat (file->name, &st) == 0 + if (atomic_stat (file->name, &st) == 0 && S_ISREG (st.st_mode) && FILE_TIMESTAMP_STAT_MODTIME (file->name, st) != file->last_mtime) { diff -ur make-3.80rc1.orig/dir.c make-3.80rc1/dir.c --- make-3.80rc1.orig/dir.c Thu Jul 11 19:48:03 2002 +++ make-3.80rc1/dir.c Mon Jul 15 15:34:00 2002 @@ -461,7 +461,7 @@ #ifdef VMS r = vmsstat_dir (name, &st); #else - r = stat (name, &st); + r = atomic_stat (name, &st); #endif #ifdef WINDOWS32 @@ -1167,7 +1167,7 @@ # ifndef VMS extern int stat (); # endif -# define local_stat stat +# define local_stat atomic_stat #else static int local_stat (path, buf) char *path; diff -ur make-3.80rc1.orig/make.h make-3.80rc1/make.h --- make-3.80rc1.orig/make.h Thu Jul 11 19:48:03 2002 +++ make-3.80rc1/make.h Mon Jul 15 15:39:14 2002 @@ -455,6 +455,8 @@ extern void make_access PARAMS ((void)); extern void child_access PARAMS ((void)); +extern int atomic_stat (const char *, struct stat *); + #ifdef HAVE_VFORK_H # include #endif diff -ur make-3.80rc1.orig/misc.c make-3.80rc1/misc.c --- make-3.80rc1.orig/misc.c Thu Jul 11 19:48:03 2002 +++ make-3.80rc1/misc.c Mon Jul 15 15:40:10 2002 @@ -856,3 +856,14 @@ return value; } #endif + +int +atomic_stat (file_name, buf) +const char *file_name; +struct stat *buf; +{ + while (stat (file_name, buf) != 0) + if (errno != EINTR) + return -1; + return 0; +} diff -ur make-3.80rc1.orig/read.c make-3.80rc1/read.c --- make-3.80rc1.orig/read.c Thu Jul 11 19:48:03 2002 +++ make-3.80rc1/read.c Mon Jul 15 15:35:14 2002 @@ -2796,7 +2796,7 @@ dir = expanded; } - if (stat (dir, &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) + if (atomic_stat (dir, &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) { if (idx == max - 1) { @@ -2829,7 +2829,7 @@ #endif for (i = 0; default_include_directories[i] != 0; ++i) - if (stat (default_include_directories[i], &stbuf) == 0 + if (atomic_stat (default_include_directories[i], &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) dirs[idx++] = default_include_directories[i]; diff -ur make-3.80rc1.orig/remake.c make-3.80rc1/remake.c --- make-3.80rc1.orig/remake.c Thu Jul 11 19:48:03 2002 +++ make-3.80rc1/remake.c Mon Jul 15 15:35:49 2002 @@ -1266,7 +1266,7 @@ { struct stat st; - if (stat (name, &st) != 0) + if (atomic_stat (name, &st) != 0) { if (errno != ENOENT && errno != ENOTDIR) perror_with_name ("stat:", name); diff -ur make-3.80rc1.orig/vpath.c make-3.80rc1/vpath.c --- make-3.80rc1.orig/vpath.c Tue Jun 13 01:22:52 2000 +++ make-3.80rc1/vpath.c Mon Jul 15 15:37:42 2002 @@ -515,7 +515,7 @@ #endif if (!exists_in_cache /* Makefile-mentioned file need not exist. */ - || stat (name, &st) == 0) /* Does it really exist? */ + || atomic_stat (name, &st) == 0) /* Does it really exist? */ { /* We have found a file. Store the name we found into *FILE for the caller. */