On Mon, 2010-10-11 at 11:11 +0200, Bert Huijben wrote: > > > -----Original Message----- > > From: Greg Stein [mailto:gst...@gmail.com] > > Sent: maandag 11 oktober 2010 11:03 > > To: Bert Huijben > > Cc: dev@subversion.apache.org; artag...@apache.org > > Subject: Re: svn commit: r1004286 - in /subversion/trunk: ./ > > subversion/libsvn_subr/io.c > > > > On Mon, Oct 11, 2010 at 04:58, Bert Huijben <b...@qqmail.nl> wrote: > > >> -----Original Message----- > > >> From: artag...@apache.org [mailto:artag...@apache.org] > > >> Sent: maandag 4 oktober 2010 17:27 > > >> To: comm...@subversion.apache.org > > >> Subject: svn commit: r1004286 - in /subversion/trunk: ./ > > >> subversion/libsvn_subr/io.c > > >> > > >> Author: artagnon > > >> Date: Mon Oct 4 15:26:44 2010 > > >> New Revision: 1004286 > > >> > > >> URL: http://svn.apache.org/viewvc?rev=1004286&view=rev > > >> Log: > > >> Merge r985477 from subversion/branches/performance > > >> > > >> * subversion/libsvn_subr/io.c > > >> (get_default_file_perms): Store the permissions of the created > > >> temporary file in a static variable and re-use it in subsequent > > >> calls instead of checking persmissions everytime. This has > > >> performance benefits. > > >> > > >> Review by: artagnon > > >> Approved by: julianfoad > > > > > > Delayed review: > > > > > > Shouldn't this function use some 'atomic initialization' handling? > > > > > > Currently it uses a static apr_fileperms_t (integer?) which can be > > manipulated by multiple threads at the same time. > > > > > > This part of subversion is a library and inside tools like Subclipse, > > TortoiseSVN, AnkhSVN and others it is used multithreaded. > > > > So what? Aren't all of those threads going to write the exact same > > value into the variable? > > > > And if they *don't*, then I believe we have larger problems. > > No, they are taking the value that is being stored there at the same time > (read: value is undefined) and use that as the umask. > > The pattern > static long x;
> if (x == 0) > { > <calculating> > x = <value> > } > <use x> > > is not thread safe. <http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic>. "On an IA32 a correctly aligned address will be an atomic operation. [... otherwise... can't assume it is]." - Julian