On Mon, 2010-10-11, Julian Foad wrote:
> On Mon, 2010-10-11, Bert Huijben wrote:
> > > -----Original Message-----
> > > From: Greg Stein [mailto:gst...@gmail.com]
> > > On Mon, Oct 11, 2010 at 04:58, Bert Huijben <b...@qqmail.nl> wrote:
> > > >> -----Original Message-----
> > > >> From: artag...@apache.org [mailto:artag...@apache.org]
> > > >> * 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.
> > > >
> > > > 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]."

Sorry, I pressed "Send" too early.  That's not the most important bit of
information.  (That paragraph talks mostly about <= 32-bit CPUs, where
of course there will be problems.)  Bert explained to me on IRC that
atomicity is not guaranteed even on >= 32 bit architectures, and the
highest-ranked answer on that web page agrees.  I'm no expert in this so
I'll go away now.

- Julian


Reply via email to