Commit 82980a23 authored by Andrew Tridgell's avatar Andrew Tridgell

fixed timing problem with cleanup and io_flush() by using non-blocking

waitpid()
parent b6a30afc
......@@ -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);
......
......@@ -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__)
......@@ -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>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment