X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/98b332edeaadb77178fdf4ae2de80e6c18572efd..ad301e487c1b50120d7ca1a9c7cc5fe80f50b944:/io.c diff --git a/io.c b/io.c index 4591f692..f651116e 100644 --- a/io.c +++ b/io.c @@ -52,14 +52,23 @@ extern int io_timeout; 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. */ @@ -95,7 +104,7 @@ static void check_timeout(void) } } -/** 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; @@ -501,7 +510,7 @@ static void writefd_unbuffered(int fd,char *buf,size_t len) 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); } @@ -617,6 +626,14 @@ void write_int(int f,int32 x) } +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.