aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriap10@freefall.cl.cam.ac.uk <iap10@freefall.cl.cam.ac.uk>2005-03-10 14:27:50 +0000
committeriap10@freefall.cl.cam.ac.uk <iap10@freefall.cl.cam.ac.uk>2005-03-10 14:27:50 +0000
commitc3918e84f7b7e04a512b45127312f8f59f0fe243 (patch)
tree1a4a48a3c75f2c6b9d6b874952c267f65ae601ae
parent06f98ccd3585ead4e6f71a73caef52e259f20aea (diff)
downloadxen-c3918e84f7b7e04a512b45127312f8f59f0fe243.tar.gz
xen-c3918e84f7b7e04a512b45127312f8f59f0fe243.tar.bz2
xen-c3918e84f7b7e04a512b45127312f8f59f0fe243.zip
bitkeeper revision 1.1159.258.35 (42305966D0gCjlR6KGQJ4LZR2FIX3g)
Fix to xfrd stream handling which was messing up save/restore/migrate on some systems. Signed-off-by: ian@xensource.com
-rw-r--r--tools/libxutil/file_stream.c26
-rw-r--r--tools/xfrd/xfrd.c2
2 files changed, 20 insertions, 8 deletions
diff --git a/tools/libxutil/file_stream.c b/tools/libxutil/file_stream.c
index 40391f7fa6..b5526d84a1 100644
--- a/tools/libxutil/file_stream.c
+++ b/tools/libxutil/file_stream.c
@@ -69,18 +69,28 @@ IOStream *iostdout = &_iostdout;
/** IOStream for stderr. */
IOStream *iostderr = &_iostderr;
-/** Get the underlying FILE*.
- *
+/* Get the underlying FILE*.
+ *
* @param s file stream
* @return the stream s wraps
*/
static inline FILE *get_file(IOStream *s){
- switch((long)s->data){
- case 1: s->data = stdin; break;
- case 2: s->data = stdout; break;
- case 3: s->data = stderr; break;
- }
- return (FILE*)s->data;
+ FILE *data = NULL;
+ switch((long)s->data){
+ case 1:
+ data = stdin;
+ break;
+ case 2:
+ data = stdout;
+ break;
+ case 3:
+ data = stderr;
+ break;
+ default:
+ data = (FILE*)s->data;
+ break;
+ }
+ return data;
}
/** Control buffering on the underlying stream, like setvbuf().
diff --git a/tools/xfrd/xfrd.c b/tools/xfrd/xfrd.c
index 656abc0bc4..bd25ad8cd2 100644
--- a/tools/xfrd/xfrd.c
+++ b/tools/xfrd/xfrd.c
@@ -1007,6 +1007,8 @@ int xfrd_accept(Args *args, int sock){
}
iprintf("> Accepted connection from %s:%d on %d\n",
inet_ntoa(peer_in.sin_addr), htons(peer_in.sin_port), sock);
+ fflush(stdout);
+ fflush(stderr);
pid = fork();
if(pid > 0){
// Parent, fork succeeded.