summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-08-16 08:34:18 +0000
committerAndrew Tridgell <tridge@samba.org>2000-08-16 08:34:18 +0000
commit82980a23840452c069c37dd7c99c3ac937536847 (patch)
treea20a3de26146eddf5a3354342194e2d038b59f7b
parentb6a30afc9812ddf685caf7d06dcf102e9e8073e9 (diff)
downloadrsync-82980a23840452c069c37dd7c99c3ac937536847.tar.gz
fixed timing problem with cleanup and io_flush() by using non-blocking
waitpid()
-rw-r--r--main.c13
-rw-r--r--rsync.h4
-rw-r--r--util.c14
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 <dlfcn.h>