From owner-freebsd-current Thu Apr 19 13:40:42 2001 Delivered-To: freebsd-current@freebsd.org Received: from mailman.zeta.org.au (mailman.zeta.org.au [203.26.10.16]) by hub.freebsd.org (Postfix) with ESMTP id 1A79237B424; Thu, 19 Apr 2001 13:40:35 -0700 (PDT) (envelope-from bde@zeta.org.au) Received: from bde.zeta.org.au (bde.zeta.org.au [203.2.228.102]) by mailman.zeta.org.au (8.9.3/8.8.7) with ESMTP id GAA27546; Fri, 20 Apr 2001 06:40:32 +1000 Date: Fri, 20 Apr 2001 06:39:30 +1000 (EST) From: Bruce Evans X-Sender: bde@besplex.bde.org To: Ruslan Ermilov Cc: current@FreeBSD.ORG Subject: Re: Atomic install(1) by default (was: Re: groff breaks "make -j N buildworld") In-Reply-To: <20010419180352.C13567@sunbay.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Thu, 19 Apr 2001, Ruslan Ermilov wrote: > On Thu, Apr 19, 2001 at 05:53:53PM +0300, Ruslan Ermilov wrote: > > On Thu, Apr 19, 2001 at 11:12:24PM +1000, Bruce Evans wrote: > > > atomic installation. Atomic installation (but not -C) should be the > > > default. > > > > > This one seems like an easy task, and this is suspicious... How about > > the attached patch? I have tested it lightly, and haven't found any > > problems. Will the `make -j32 installworld' of -CURRENT be enough > > test to commit this and remove -B from Makefile.inc1? > > > Damn, forgot to attach the patch. Here it goes... This seems to be simple enough. A bit too simple :-). The old behaviour of deleting the target first is still needed at least optionally to handle cases where there is no space for a copy. Cleaning up the temporary files after a signal is more necessary if -C is the default. Index: xinstall.c =================================================================== RCS file: /home/ncvs/src/usr.bin/xinstall/xinstall.c,v retrieving revision 1.40 diff -u -p -r1.40 xinstall.c --- xinstall.c 2000/10/08 09:17:56 1.40 +++ xinstall.c 2001/04/19 14:38:41 @@ -53,11 +53,6 @@ static const char rcsid[] = * attribute changes and don't clear the dump flag. (I think inode * ctimes are not updated for null attribute changes, but this is a * bug.) - * o independent of -C, if a copy must be made, then copy to a tmpfile, - * set all attributes except the immutable flags, then rename, then - * set the immutable flags. It's annoying that the immutable flags - * defeat the atomicicity of rename - it seems that there must be - * a window where the target is not immutable. */ The comment still applies to the -C case. We now always make a copy, but for -C this is just a waste of time if the comparison succeeds. ... @@ -409,7 +404,7 @@ install(from_name, to_name, fset, flags) * It may be possible to better optimize the !dostrip case, however. * For further study. */ - if (docompare) { + if (docopy) { struct stat old_sb, new_sb, timestamp_sb; int old_fd; struct utimbuf utb; @@ -423,7 +418,7 @@ install(from_name, to_name, fset, flags) if (old_sb.st_flags & NOCHANGEBITS) (void)fchflags(old_fd, old_sb.st_flags & ~NOCHANGEBITS); fstat(to_fd, &new_sb); - if (compare(old_fd, old_to_name, to_fd, to_name, &old_sb, + if (!docompare || compare(old_fd, old_to_name, to_fd, to_name, &old_sb, &new_sb)) { Line too long. Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message