[m-rev.] for review: handle I/O errors when reporting statistics
Zoltan Somogyi
zoltan.somogyi at runbox.com
Mon Apr 5 10:43:25 AEST 2021
On Mon, 5 Apr 2021 03:38:39 +1000 (AEST), Julien Fischer <jfischer at opturion.com> wrote:
> @@ -288,21 +238,17 @@ ML_report_standard_stats(io.MR_MercuryFileStruct stream)
> long real_time_at_prev_stat = real_time_at_last_stat;
> real_time_at_last_stat = System.DateTime.Now.Ticks;
>
> - try {
> - io.mercury_print_string(stream, System.String.Format(
> - ""[User time: +{0:F2}s, {1:F2}s Real time: +{2:F2}s, {3:F2}s]\\n"",
> - (user_time_at_last_stat - user_time_at_prev_stat),
> - (user_time_at_last_stat - user_time_at_start),
> - ((real_time_at_last_stat - real_time_at_prev_stat)
> - / (double) System.TimeSpan.TicksPerSecond),
> - ((real_time_at_last_stat - real_time_at_start)
> - / (double) System.TimeSpan.TicksPerSecond)
> - ));
> - // XXX At this point there should be a whole bunch of memory usage
> - // statistics.
> - } catch (System.SystemException e) {
> - // XXX how should we handle I/O errors when printing statistics?
> - }
> + io.mercury_print_string(stream, System.String.Format(
> + ""[User time: +{0:F2}s, {1:F2}s Real time: +{2:F2}s, {3:F2}s]\\n"",
> + (user_time_at_last_stat - user_time_at_prev_stat),
> + (user_time_at_last_stat - user_time_at_start),
> + ((real_time_at_last_stat - real_time_at_prev_stat)
> + / (double) System.TimeSpan.TicksPerSecond),
> + ((real_time_at_last_stat - real_time_at_start)
> + / (double) System.TimeSpan.TicksPerSecond)
> + ));
> + // XXX At this point there should be a whole bunch of memory usage
> + // statistics.
> }
This kind of change is much easier to review when the diff is done with diff -b.
As this diff is formatted now, I am just *assuming* that the stuff whose indentation
changed had no other relevant changes.
> @@ -91,23 +93,35 @@ MR_report_standard_stats(FILE *fp, int *line_number)
> eng = MR_get_engine();
> #endif
>
> - fprintf(fp, "[User time: +%.3fs, %.3fs,",
> - (MR_user_time_at_last_stat - user_time_at_prev_stat) / 1000.0,
> - (MR_user_time_at_last_stat - MR_user_time_at_start) / 1000.0
> - );
> + if (
> + fprintf(fp, "[User time: +%.3fs, %.3fs,",
> + (MR_user_time_at_last_stat - user_time_at_prev_stat) / 1000.0,
> + (MR_user_time_at_last_stat - MR_user_time_at_start) / 1000.0
> + ) < 0
> + ) {
> + return errno;
> + }
Instead of putting calls to fprintf into the condition of an if-then-else,
I would *much* rather you just assigned the return value from the fprintf
to a local var, and then tested *that*, here and everywhere else.
Other than that, the diff is fine, though I do note that this diff does
not extend to checking for I/O errors when printing tabling statistics.
Zoltan.
More information about the reviews
mailing list