diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2011-03-18 18:27:21 +0000 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2011-03-18 18:27:24 +0000 |
commit | f4d996fd26762053d68f46de5790aae893f03d38 (patch) | |
tree | 503049720d83e3d115afe55e5e04b5abd57a0939 /src/guestfs-internal.h | |
parent | 33b638109ed66ea360b53b80b1f407b3a5f5ec39 (diff) | |
download | libguestfs-f4d996fd26762053d68f46de5790aae893f03d38.tar.gz libguestfs-f4d996fd26762053d68f46de5790aae893f03d38.tar.xz libguestfs-f4d996fd26762053d68f46de5790aae893f03d38.zip |
proto: Fix both-ends-cancel case.
In the case where both ends cancel at the same time (eg. both ends
realize there are errors before or during the transfer), previously we
skipped sending back an error from the daemon, on the spurious basis
that the library would not need it (the library is cancelling because
of its own error).
However this is wrong: we should always send back an error message
from the daemon in order to preserve synchronization of the protocol.
A simple test case is:
$ guestfish -N fs -m /dev/sda1 upload nosuchfile /
libguestfs: error: open: nosuchfile: No such file or directory
libguestfs: error: unexpected procedure number (66/282)
(Notice two things: there are errors at both ends, and the
loss of synchronization).
After applying this commit, the loss of synchronization does not occur
and we just see the library error:
$ guestfish -N fs -m /dev/sda1 upload nosuchfile /
libguestfs: error: open: nosuchfile: No such file or directory
The choice of displaying the library or the daemon error is fairly
arbitrary in this case -- it would be valid to display either or even
to combine them into one error. Displaying the library error only
makes the code considerably simpler.
This commit also (re-)enables a test for this case.
Diffstat (limited to 'src/guestfs-internal.h')
-rw-r--r-- | src/guestfs-internal.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h index 7223a884..ccc5bb5f 100644 --- a/src/guestfs-internal.h +++ b/src/guestfs-internal.h @@ -289,6 +289,7 @@ extern int guestfs___set_busy (guestfs_h *g); extern int guestfs___end_busy (guestfs_h *g); extern int guestfs___send (guestfs_h *g, int proc_nr, uint64_t progress_hint, uint64_t optargs_bitmask, xdrproc_t xdrp, char *args); extern int guestfs___recv (guestfs_h *g, const char *fn, struct guestfs_message_header *hdr, struct guestfs_message_error *err, xdrproc_t xdrp, char *ret); +extern int guestfs___recv_discard (guestfs_h *g, const char *fn); extern int guestfs___send_file (guestfs_h *g, const char *filename); extern int guestfs___recv_file (guestfs_h *g, const char *filename); extern int guestfs___send_to_daemon (guestfs_h *g, const void *v_buf, size_t n); |