diff options
Diffstat (limited to 'perform/pio_engine.c')
-rw-r--r-- | perform/pio_engine.c | 10 |
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); |