From 810b02121f0ce9e6524e34c9da0f3cc45efac482 Mon Sep 17 00:00:00 2001 From: Tambet Ingo Date: Sun, 21 Jun 2009 12:53:02 +0300 Subject: [PATCH] core: Block until netconfig exits on suse. --- src/named-manager/nm-named-manager.c | 29 +++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/named-manager/nm-named-manager.c b/src/named-manager/nm-named-manager.c index bccc9de626..a360958b64 100644 --- a/src/named-manager/nm-named-manager.c +++ b/src/named-manager/nm-named-manager.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -130,12 +131,12 @@ netconfig_child_setup (gpointer user_data G_GNUC_UNUSED) setpgid (pid, pid); } -static gint -run_netconfig (GError **error) +static GPid +run_netconfig (GError **error, gint *stdin_fd) { char *argv[5]; char *tmp; - gint stdin_fd; + GPid pid = -1; argv[0] = "/sbin/netconfig"; argv[1] = "modify"; @@ -148,10 +149,10 @@ run_netconfig (GError **error) g_free (tmp); if (!g_spawn_async_with_pipes (NULL, argv, NULL, 0, netconfig_child_setup, - NULL, NULL, &stdin_fd, NULL, NULL, error)) + NULL, &pid, &stdin_fd, NULL, NULL, error)) return -1; - return stdin_fd; + return pid; } static void @@ -173,11 +174,13 @@ dispatch_netconfig (const char *domain, const char *iface, GError **error) { - gint fd; char *str; + GPid pid; + gint fd; + int ret; - fd = run_netconfig (error); - if (fd < 0) + pid = run_netconfig (error, &fd); + if (pid < 0) return FALSE; write_to_netconfig (fd, "INTERFACE", iface); @@ -205,7 +208,15 @@ dispatch_netconfig (const char *domain, close (fd); - return TRUE; + /* Wait until the process exits */ + + again: + + ret = waitpid (pid, NULL, 0); + if (ret < 0 && errno == EINTR) + goto again; + + return ret > 0; } #endif