User: zlochower Date: 2012/07/30 01:58 PM
Modified: /trunk/src/ Recon.cc
Log: check for hdf5 IO errors and abort
File Changes:
Directory: /trunk/src/ ======================
File [modified]: Recon.cc Delta lines: +28 -9 =================================================================== --- trunk/src/Recon.cc 2012-07-21 10:47:40 UTC (rev 13) +++ trunk/src/Recon.cc 2012-07-30 18:58:53 UTC (rev 14) @@ -16,6 +16,22 @@ #include <hdf5.h> #include <hdf5_hl.h>
+static int hdf5_warn_level = CCTK_WARN_ABORT; + +#define HDF5_ERROR(fn_call) \ + do { \ + int _error_code = fn_call; \ + \ + \ + if (_error_code < 0) \ + { \ + CCTK_VWarn (hdf5_warn_level, __LINE__, __FILE__, CCTK_THORNSTRING, \ + "HDF5 call '%s' returned error code %d", \ + #fn_call, _error_code); \ + } \ + } while (0) + + #undef SPHERICALHARMONICRECON_DEBUG
#define BUFFSIZE 1024 @@ -197,23 +213,22 @@ } else { - status = H5LTget_attribute_int(file_id,"/metadata/","spin",&spin); - status = H5LTget_attribute_int(file_id,"/metadata/","dim",dim); - status = H5LTget_attribute_double(file_id,"/metadata/","Rin",&Rin); - status = H5LTget_attribute_double(file_id,"/metadata/","Rout",&Rout); + HDF5_ERROR(status = H5LTget_attribute_int(file_id,"/metadata/","spin",&spin)); + HDF5_ERROR(status = H5LTget_attribute_int(file_id,"/metadata/","dim",dim)); + HDF5_ERROR(status = H5LTget_attribute_double(file_id,"/metadata/","Rin",&Rin)); + HDF5_ERROR(status = H5LTget_attribute_double(file_id,"/metadata/","Rout",&Rout)); }
nn = dim[0]; na = dim[1]; nl = static_cast<int>(round(sqrt(double(na+spin*spin))-abs(double(spin))));
- status = H5LTget_attribute_double(file_id,"/0/", "Time", &time0); - status = H5LTget_attribute_double(file_id,"/1/", "Time", &dtime); - + HDF5_ERROR(status = H5LTget_attribute_double(file_id,"/0/", "Time", &time0)); + HDF5_ERROR(status = H5LTget_attribute_double(file_id,"/1/", "Time", &dtime)); dtime -= time0;
- status = H5Fclose(file_id); + HDF5_ERROR(status = H5Fclose(file_id)); }
const int root = 0; /* proc 0 sends the data to everyone else */ @@ -314,7 +329,7 @@ CCTK_WARN(CCTK_WARN_ABORT, "order not implemented"); }
- status = H5Fclose(file_id); + HDF5_ERROR(status = H5Fclose(file_id)); }
@@ -597,6 +612,7 @@ if (status) { cerr << "Could not read data from " << buff << endl; + CCTK_WARN(CCTK_WARN_ABORT, "Dataset read failure"); }
snprintf(buff, BUFFSIZE-1, "/%d/%s/im", it, gfname[comp]); @@ -605,6 +621,7 @@ if (status) { cerr << "Could not read data from " << buff << endl; + CCTK_WARN(CCTK_WARN_ABORT, "Dataset read failure"); }
if (read_dt) @@ -614,6 +631,7 @@ if (status) { cerr << "Could not read data from " << buff << endl; + CCTK_WARN(CCTK_WARN_ABORT, "Dataset read failure"); }
snprintf(buff, BUFFSIZE-1, "/%d/%s/dt_im", it, gfname[comp]); @@ -622,6 +640,7 @@ if (status) { cerr << "Could not read data from " << buff << endl; + CCTK_WARN(CCTK_WARN_ABORT, "Dataset read failure"); }
}
commits@lists.einsteintoolkit.org