Date: Sun, 4 Jan 1998 18:03:16 +0000 From: James Raynard <fcurrent@jraynard.demon.co.uk> To: freebsd-current@freebsd.org Subject: make -j install fix Message-ID: <19980104180316.06571@jraynard.demon.co.uk>
next in thread | raw e-mail | index | archive | help
Having investigated this a little more, I think the following is better than the diff I posted a few days ago (there seems to be a window where /bin/sh isn't there and execv() returns ENOENT - also one second seems a little short to sleep). Comments? Index: job.c =================================================================== RCS file: /home/cvs/src/usr.bin/make/job.c,v retrieving revision 1.7 diff -u -r1.7 job.c --- job.c 1997/02/22 19:27:11 1.7 +++ job.c 1998/01/04 17:53:04 @@ -1269,6 +1269,17 @@ #endif /* REMOTE */ (void) execv(shellPath, argv); + /* + * When using the -j option to install /bin, there + * is a possibility the above call will fail if + * /bin/sh was being installed at the same time as this + * target. To avoid this, we sleep for a few seconds + * and retry. + */ + if (errno == EACCES || errno == ENOENT) { + (void) sleep(3); + (void) execv(shellPath, argv); + } (void) write(2, "Could not execute shell\n", sizeof("Could not execute shell")); _exit(1); -- In theory, theory is better than practice. In practice, it isn't. James Raynard, Edinburgh, Scotland. http://www.freebsd.org/~jraynard/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980104180316.06571>