Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java @ 775:eedad2ddad14
Removed race-condition while shapefile creation (issue164).
gnv-artifacts/trunk@841 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 26 Mar 2010 15:20:32 +0000 |
parents | 93489a0c1328 |
children | 9a828e5a2390 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java Fri Mar 26 10:06:36 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java Fri Mar 26 15:20:32 2010 +0000 @@ -45,6 +45,7 @@ import de.intevation.gnv.state.exception.StateException; +import de.intevation.gnv.utils.ExclusiveExec; import de.intevation.gnv.utils.FileUtils; import de.intevation.gnv.utils.MapfileGenerator; import de.intevation.gnv.utils.MetaWriter; @@ -222,9 +223,11 @@ } else { AttributedPoint2ds result = getResult(uuid, callContext); + ExclusiveExec.UniqueKey k = ExclusiveExec.INSTANCE.acquire(uuid); if (result != null && (p = writeToShapeFile(uuid, result, callContext)) != null) { FileUtils.createZipArchive(new File(p), output); + ExclusiveExec.INSTANCE.release(k); } } } @@ -274,8 +277,10 @@ } else { AttributedPoint2ds result = getResult(uuid, callContext); + ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid); if (result != null && (path = writeToShapeFile(uuid, result, callContext)) != null) { + ExclusiveExec.INSTANCE.release(key); String paramType = findParameterType(callContext); @@ -294,6 +299,7 @@ Document meta = MetaWriter.writeHorizontalcrosssectionMeta( callContext, uuid, path, paramType); + if (meta != null) { MapfileGenerator.getInstance().update(); return meta; @@ -349,13 +355,10 @@ try { synchronized (shapeFileLock) { - int count = 0; - while (shapeDir.exists()) { - shapeDir = new File(baseDir, uuid + "-" + count); - ++count; + if (shapeDir.exists()) { + FileUtils.deleteContent(shapeDir); } - - if (!shapeDir.mkdirs()) { + else if (!shapeDir.mkdirs()) { log.error("cannot create directory '" + shapeDir.getAbsolutePath() + "'"); return null;