+Mon Sep 17 23:04:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
+
+ * src/remote_internal.c: Track child pid and do waitpid to clean
+ up zombies if running over a tunnel
+
Thu Sep 13 17:58:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_conf.c: Fix handling of <boot> tag for network PXE
struct private_data {
int magic; /* Should be MAGIC or DEAD. */
int sock; /* Socket. */
+ pid_t pid; /* PID of tunnel process */
int uses_tls; /* TLS enabled on socket? */
gnutls_session_t session; /* GnuTLS session (if uses_tls != 0). */
char *type; /* Cached return from remoteType. */
/*FALLTHROUGH*/
case trans_ext: {
- int pid;
+ pid_t pid;
int sv[2];
/* Fork off the external process. Use socketpair to create a private
/* Parent continues here. */
close (sv[1]);
priv->sock = sv[0];
+ priv->pid = pid;
}
} /* switch (transport) */
gnutls_bye (priv->session, GNUTLS_SHUT_RDWR);
close (priv->sock);
}
+ if (priv->pid > 0) {
+ pid_t reap;
+ do {
+ reap = waitpid(priv->pid, NULL, 0);
+ if (reap == -1 && errno == EINTR)
+ continue;
+ } while (reap != -1 && reap != priv->pid);
+ }
/* Free up the URL and strings. */
xmlFreeURI (uri);
gnutls_bye (priv->session, GNUTLS_SHUT_RDWR);
close (priv->sock);
+ if (priv->pid > 0) {
+ pid_t reap;
+ do {
+ reap = waitpid(priv->pid, NULL, 0);
+ if (reap == -1 && errno == EINTR)
+ continue;
+ } while (reap != -1 && reap != priv->pid);
+ }
+
/* See comment for remoteType. */
if (priv->type) free (priv->type);