untarring symlinks with ../ fails randomly

Dan Grayson dan@math.uiuc.edu
Tue Apr 26 17:58:00 GMT 2011


Christopher Faylor <cgf-use-the-mailinglist-please <at> cygwin.com> writes:

> Cygwin doesn't change the creation time gratuitously.  Sounds like BLODA 
> to me.
> http://cygwin.com/acronyms/#BLODA
> 
> cgf

Good call!  I killed Vid.exe from Logitech and reduced the probability of
failure from 25% per file to 1%.  Sadly, killing other processes doesn't seem
to bring the probability down to 0%, but I'm still trying.  If anyone else
wants to give it a try, here is a better C program for testing, that tries 1000
times.




   /* 
 gcc -Wall ctime.c -o ctime && ./ctime
   */

#include <unistd.h>
#include <assert.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdio.h>

#define FN "temporary-file-junk"

int main () {
     int m = 0, n = 1000, i;
     for (i=0; i<n; i++) {
	  static struct stat s1, s2;
	  unlink(FN);
	  int fd = open(FN,O_EXCL|O_CREAT|O_WRONLY,0);
	  fstat(fd,&s1);
	  close(fd);
	  stat(FN,&s2);
	  if (s1.st_ctim.tv_sec != s2.st_ctim.tv_sec || 
	      s1.st_ctim.tv_nsec != s2.st_ctim.tv_nsec) 
	       m++,
	       printf("ctime changed %3d: %lu.%09lu -> %lu.%09lu\n", 
		      i,
		      s1.st_ctim.tv_sec, s1.st_ctim.tv_nsec, 
		      s2.st_ctim.tv_sec, s2.st_ctim.tv_nsec);
	  }
     unlink(FN);
     printf("ctime change ratio: %d / %d = %.2g\n",m,n,(float)m/n);
     return 0;
     }



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list