@@ -427,6 +427,8 @@ write_darray_multi_par(file_desc_t *file, int nvars, int fndims, const int *vari
427427 int rrcnt = 0 ; /* Number of subarray requests (pnetcdf only). */
428428 PIO_Offset * startlist [num_regions ]; /* Array of start arrays for ncmpi_iput_varn(). */
429429 PIO_Offset * countlist [num_regions ]; /* Array of count arrays for ncmpi_iput_varn(). */
430+
431+ ierr = ncmpi_wait_all (file -> fh , NC_REQ_ALL , NULL , NULL );
430432#endif /* _PNETCDF */
431433
432434 /* Process each region of data to be written. */
@@ -643,27 +645,10 @@ write_darray_multi_par(file_desc_t *file, int nvars, int fndims, const int *vari
643645 else /* don't flush yet, accumulate the request size */
644646 vard_llen += llen ;
645647#else
646- if (vdesc -> nreqs % PIO_REQUEST_ALLOC_CHUNK == 0 )
647- {
648- if (!(vdesc -> request = realloc (vdesc -> request , sizeof (int ) *
649- (vdesc -> nreqs + PIO_REQUEST_ALLOC_CHUNK ))))
650- return pio_err (ios , file , PIO_ENOMEM , __FILE__ , __LINE__ );
651648
652- for (int i = vdesc -> nreqs ; i < vdesc -> nreqs + PIO_REQUEST_ALLOC_CHUNK ; i ++ )
653- vdesc -> request [i ] = NC_REQ_NULL ;
654- }
655-
656- /* Write, in non-blocking fashion, a list of subarrays. */
657- // PLOG((3, "about to call ncmpi_iput_varn() varids[%d] = %d rrcnt = %d, llen = %d",
658- // nv, varids[nv], rrcnt, llen));
659- // for(int i=0;i < llen; i++)
660- // PLOG((3, "bufptr[%d] = %d",i,((int *)bufptr)[i]));
661649 ierr = ncmpi_iput_varn (file -> fh , varids [nv ], rrcnt , startlist , countlist ,
662- bufptr , llen , iodesc -> mpitype , & vdesc -> request [ vdesc -> nreqs ] );
650+ bufptr , llen , iodesc -> mpitype , NULL );
663651
664- /* keeps wait calls in sync */
665- if (vdesc -> request [vdesc -> nreqs ] == NC_REQ_NULL )
666- vdesc -> request [vdesc -> nreqs ] = PIO_REQ_NULL ;
667652
668653 vdesc -> nreqs ++ ;
669654#endif
@@ -1750,58 +1735,34 @@ flush_output_buffer(file_desc_t *file, bool force, PIO_Offset addsize)
17501735 * limit, then flush to disk. */
17511736 if (force || (usage >= pio_pnetcdf_buffer_size_limit ))
17521737 {
1753- int rcnt ;
17541738 int maxreq ;
1755- int reqcnt ;
17561739 maxreq = 0 ;
1757- reqcnt = 0 ;
1758- rcnt = 0 ;
17591740
17601741 for (int i = 0 ; i < file -> nvars ; i ++ )
17611742 {
17621743 if ((ierr = get_var_desc (i , & file -> varlist , & vdesc )))
17631744 return pio_err (NULL , file , ierr , __FILE__ , __LINE__ );
1764- reqcnt += vdesc -> nreqs ;
17651745 if (vdesc -> nreqs > 0 )
17661746 maxreq = i ;
17671747 }
1768- int request [reqcnt ];
1769- int status [reqcnt ];
1770-
17711748 if (file -> varlist )
17721749 {
17731750 for (int i = 0 ; i <= maxreq ; i ++ )
17741751 {
17751752 if ((ierr = get_var_desc (i , & file -> varlist , & vdesc )))
17761753 return pio_err (NULL , file , ierr , __FILE__ , __LINE__ );
1777- #ifdef MPIO_ONESIDED
1778- /*onesided optimization requires that all of the requests in a wait_all call represent
1779- a contiguous block of data in the file */
1780- if (rcnt > 0 && (prev_record != vdesc -> record || vdesc -> nreqs == 0 ))
1781- {
1782- ierr = ncmpi_wait_all (file -> fh , rcnt , request , status );
1783- rcnt = 0 ;
1784- }
1785- prev_record = vdesc -> record ;
1786- #endif
1787- for (reqcnt = 0 ; reqcnt < vdesc -> nreqs ; reqcnt ++ )
1788- request [rcnt ++ ] = max (vdesc -> request [reqcnt ], NC_REQ_NULL );
1789- PLOG ((3 ,"flush_output_buffer rcnt=%d" ,rcnt ));
17901754
1791- if (vdesc -> request != NULL )
1792- free (vdesc -> request );
1793- vdesc -> request = NULL ;
17941755 vdesc -> nreqs = 0 ;
17951756
17961757#ifdef FLUSH_EVERY_VAR
1797- ierr = ncmpi_wait_all (file -> fh , rcnt , request , status );
1758+ ierr = ncmpi_wait_all (file -> fh , NC_REQ_ALL , NULL , NULL );
1759+ //ierr = ncmpi_wait_all(file->fh, rcnt, request, status);
17981760 rcnt = 0 ;
17991761#endif
18001762 }
18011763 }
1802-
1803- if (rcnt > 0 )
1804- ierr = ncmpi_wait_all (file -> fh , rcnt , request , status );
1764+ /* make sure all buffers are now clean */
1765+ ierr = ncmpi_wait_all (file -> fh , NC_REQ_ALL , NULL , NULL );
18051766
18061767 /* Release resources. */
18071768 if (file -> iobuf )
0 commit comments