From d480558fe8a2de12be4fcd9a1bdd1b71c233787b Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Mon, 9 Jan 2006 21:30:43 +0000 Subject: Fixed lockup on exit - Fixed lockup on exit (Waiting rccexternal exit forever) --- src/rccexternal.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/rccexternal.c') diff --git a/src/rccexternal.c b/src/rccexternal.c index 6a81c56..be9f97d 100644 --- a/src/rccexternal.c +++ b/src/rccexternal.c @@ -79,13 +79,25 @@ int rccExternalInit() { } void rccExternalFree() { + int retry; + pid_t res; + struct timespec timeout = { 0, 5000000 }; + if (pid == (pid_t)-1) return; - - rccExternalConnect(0); - if (addr) free(addr); - waitpid(pid, NULL, 0); + for (retry = 0; retry < 3; retry++) { + rccExternalConnect(0); + + nanosleep(&timeout, NULL); + + res = waitpid(pid, NULL, WNOHANG); + if (res) break; + else timeout.tv_nsec*10; + } + pid = (pid_t)-1; + if (addr) free(addr); + } static int rccExternalSetDeadline(struct timeval *tv, unsigned long timeout) { -- cgit v1.2.3