> -----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.

        Bert

Reply via email to