Hi Robert,

Initially in osgEarth we did protect against this with a global mutex but
as you said, that's only good for working within a single process against
multiple threads.  When we started dealing with multiple processes the
issue appeared again and I had to dig in and figure out what the real issue
was.  It's simply that the current code treats calling mkdir on an existing
directory as an error when in reality the function has achieved it's goal
of making sure the directory exists so it shouldn't bail out early.

The fix was inspired by a workaround for a similar race condition in the
TileCache code:
http://svn.osgeo.org/tilecache/trunk/tilecache/TileCache/Caches/Disk.py

Jason


On Mon, Apr 28, 2014 at 8:05 AM, Robert Osfield <[email protected]>wrote:

> Hi Jason,
>
>  I have just review the change but it doesn't feel like an elegant
> solution. I haven't workout a better solution yet though...
>
> A mutex to prevent makeDirectory being called by multiple threads at
> once might be one way, but this wouldn't protect against a totally
> separate process/application s for creating the directory,
>
> Do you consider/discount other solutions?
>
> Robert.
>
>
>
> On 25 April 2014 22:31, Jason Beverage <[email protected]> wrote:
> > Hi Robert,
> >
> > Here is a fix for a small race condition in osgDB::makeDirectory.  It
> > attempts to create all the directories in the given path and stops
> > attempting to make directories when one of them fails.  I've added a
> check
> > to see if the failure occurred b/c the directory was created by another
> > thread or process.
> >
> > We were running into issues occasionally in osgEarth where multiple
> threads
> > were writing out files like /1/2/3.jpg and /1/3/4.jpg.  Both threads
> would
> > try to create the /1 directory and only one of them would succeed.  So
> the
> > first thread would write out the full /1/2/3.jpg while the second thread
> > wouldn't create the /1/3 directory b/c /1 was already created and the
> > writing of /1/3/4.jpg would fail.
> >
> > Thanks!
> >
> > Jason
> >
> > _______________________________________________
> > osg-submissions mailing list
> > [email protected]
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
> >
> _______________________________________________
> osg-submissions mailing list
> [email protected]
>
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to