Paul -
After looking at this problem for a while longer, I've come up with the
attached patch which solves the problem (at least for #ifdef POSIX).
When name_mtime() is called, SIGCHLD is not set to SIG_IGN or SIG_DFL,
but has a signal handler assigned. This causes the signal to be
delivered which, of course, interrupts the system call causing make
to believe that the file doesn't exist.
Blocking SIGCHLD for just name_mtime() works great, but you have a
much better understanding of the program flow so maybe you'd prefer
putting the SIGCHLD blocking at a higher level.
I hope something like this patch can make it into make-3.79.1.
Thanks for your help, BTW. The suggestion of adding perror() really
got me headed in the right direction.
Michael Sterrett
-Mr. Bones.-
[EMAIL PROTECTED]
--- make-3.78.1.orig/remake.c Thu Sep 9 11:30:27 1999
+++ make-3.78.1/remake.c Fri May 19 17:47:26 2000
@@ -1188,9 +1188,25 @@
register char *name;
{
struct stat st;
+#ifdef POSIX
+ sigset_t signal_set;
+ sigset_t save_signal_set;
+ (void) sigprocmask (SIG_BLOCK, (sigset_t *) 0, &save_signal_set);
+ signal_set = save_signal_set;
+ sigaddset (&signal_set, SIGCHLD);
+ (void) sigprocmask (SIG_BLOCK, &signal_set, (sigset_t *) 0);
+#endif
if (stat (name, &st) < 0)
- return (FILE_TIMESTAMP) -1;
+ {
+#ifdef POSIX
+ sigprocmask (SIG_SETMASK, &save_signal_set, (sigset_t *) 0);
+#endif
+ return (FILE_TIMESTAMP) -1;
+ }
+#ifdef POSIX
+ sigprocmask (SIG_SETMASK, &save_signal_set, (sigset_t *) 0);
+#endif
return FILE_TIMESTAMP_STAT_MODTIME (st);
}