extern struct stats stats;
+const char phase_unknown[] = "unknown";
+
/**
* The connection might be dropped at some point; perhaps because the
* remote instance crashed. Just giving the offset on the stream is
* not very helpful. So instead we try to make io_phase_name point to
* something useful.
+ *
+ * For buffered/multiplexed IO these names will be somewhat
+ * approximate; perhaps for ease of support we would rather make the
+ * buffer always flush when a single application-level IO finishes.
+ *
+ * @todo Perhaps we want some simple stack functionality, but there's
+ * no need to overdo it.
**/
-const char *io_phase_name = "unknown";
-
+const char *io_write_phase = phase_unknown;
+const char *io_read_phase = phase_unknown;
/** Ignore EOF errors while reading a module listing if the remote
version is 24 or less. */
}
}
-/** Setup the fd used to propogate errors */
+/** Setup the fd used to propagate errors */
void io_set_error_fd(int fd)
{
io_error_fd = fd;
io_multiplexing_close();
rprintf(FERROR, RSYNC_NAME
": writefd_unbuffered failed to write %ld bytes: phase \"%s\": %s\n",
- (long) len, io_phase_name,
+ (long) len, io_write_phase,
strerror(errno));
exit_cleanup(RERR_STREAMIO);
}
}
+void write_int_named(int f, int32 x, const char *phase)
+{
+ io_write_phase = phase;
+ write_int(f, x);
+ io_write_phase = phase_unknown;
+}
+
+
/*
* Note: int64 may actually be a 32-bit type if ./configure couldn't find any
* 64-bit types on this platform.