summaryrefslogtreecommitdiffstats
path: root/perform/pio_engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'perform/pio_engine.c')
-rw-r--r--perform/pio_engine.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/perform/pio_engine.c b/perform/pio_engine.c
index d1ea6d3..efcfa98 100644
--- a/perform/pio_engine.c
+++ b/perform/pio_engine.c
@@ -926,6 +926,16 @@ do_fopen(iotype iot, char *fname, file_descr *fd /*out*/, int flags)
else
fd->rawfd = RAWOPEN(fname, O_RDONLY);
+ /* The perils of raw I/O in a parallel environment. The problem is:
+ *
+ * - Process n opens a file with truncation and then starts
+ * writing to the file.
+ * - Process m also opens the file with truncation, but after
+ * process n has already started to write to the file. Thus,
+ * all of the stuff process n wrote is now lost.
+ */
+ MPI_Barrier(pio_comm_g);
+
if (fd->rawfd < 0 ) {
fprintf(stderr, "Raw File Open failed(%s)\n", fname);
GOTOERROR(FAIL);