From 82980a23840452c069c37dd7c99c3ac937536847 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 16 Aug 2000 08:34:18 +0000 Subject: [PATCH] fixed timing problem with cleanup and io_flush() by using non-blocking waitpid() --- main.c | 13 +++++++++++++ rsync.h | 4 ++++ util.c | 14 -------------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/main.c b/main.c index 32d47e6d..4bd721c7 100644 --- a/main.c +++ b/main.c @@ -25,6 +25,19 @@ struct stats stats; extern int verbose; + +/**************************************************************************** +wait for a process to exit, calling io_flush while waiting +****************************************************************************/ +void wait_process(pid_t pid, int *status) +{ + while (waitpid(pid, status, WNOHANG) == 0) { + sleep(1); + io_flush(); + } + *status = WEXITSTATUS(*status); +} + static void report(int f) { time_t t = time(NULL); diff --git a/rsync.h b/rsync.h index 0742d431..588219fe 100644 --- a/rsync.h +++ b/rsync.h @@ -510,4 +510,8 @@ size_t strlcpy(char *d, const char *s, size_t bufsize); size_t strlcat(char *d, const char *s, size_t bufsize); #endif +#ifndef WEXITSTATUS +#define WEXITSTATUS(stat) ((int)(((stat)>>8)&0xFF)) +#endif + #define exit_cleanup(code) _exit_cleanup(code, __FILE__, __LINE__) diff --git a/util.c b/util.c index 4fef0b3e..b9616963 100644 --- a/util.c +++ b/util.c @@ -929,20 +929,6 @@ char *timestring(time_t t) return(TimeBuf); } - -/**************************************************************************** - like waitpid but does the WEXITSTATUS -****************************************************************************/ -#ifndef WEXITSTATUS -#define WEXITSTATUS(stat) ((int)(((stat)>>8)&0xFF)) -#endif -void wait_process(pid_t pid, int *status) -{ - waitpid(pid, status, 0); - *status = WEXITSTATUS(*status); -} - - #ifdef __INSURE__ #include -- 2.34.1