Good spotting both of you, thanks. Martin
On 18 September 2014 13:01, Lawrence Mitchell < [email protected]> wrote: > On 18/09/14 11:42, Jan Blechta wrote: > > Some problems (when running in a clean dir) are avoided using this > > (although incorrect) patch. There are race conditions in creation of > > temp dir. It should be done using atomic operation. > > > > Jan > > > > > > ================================================================== > > diff --git a/test/unit/io/python/test_XDMF.py > > b/test/unit/io/python/test_XDMF.py index 9ad65a4..31471f1 100755 > > --- a/test/unit/io/python/test_XDMF.py > > +++ b/test/unit/io/python/test_XDMF.py > > @@ -28,8 +28,9 @@ def temppath(): > > filedir = os.path.dirname(os.path.abspath(__file__)) > > basename = os.path.basename(__file__).replace(".py", "_data") > > temppath = os.path.join(filedir, basename, "") > > - if not os.path.exists(temppath): > > - os.mkdir(temppath) > > + if MPI.rank(mpi_comm_world()) == 0: > > + if not os.path.exists(temppath): > > + os.mkdir(temppath) > > return temppath > > There's still a race condition here because ranks other than zero might > try and use temppath before it's created. I think you want something > like the below: > > if MPI.rank(mpi_comm_world()) == 0: > if not os.path.exists(temppath): > os.mkdir(temppath) > MPI.barrier(mpi_comm_world()) > return temppath > > If you're worried about the OS not creating files atomically, you can > always mkdir into a tmp directory and then os.rename(tmp, temppath), > since posix guarantees that renames are atomic. > > Lawrence > _______________________________________________ > fenics mailing list > [email protected] > http://fenicsproject.org/mailman/listinfo/fenics >
_______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
