summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog18
-rw-r--r--dispatcher-daemon/NetworkManagerDispatcher.c36
-rwxr-xr-xinitscript/RedHat/NetworkManager.in7
-rwxr-xr-xinitscript/RedHat/NetworkManagerDispatcher.in5
-rw-r--r--src/NetworkManager.c79
5 files changed, 114 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index bc9f7e3a05..f94f536359 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2006-02-27 Dan Williams <dcbw@redhat.com>
+
+ * dispatcher-daemon/NetworkManagerDispatcher.c
+ - Accept --pid-file with a path to a pidfile, write it out on
+ startup, and delete it on shutdown
+
+ * src/NetworkManager.c
+ - Accept --pid-file with a path to a pidfile, write it out on
+ startup, and delete it on shutdown
+ - Move nm_print_usage() lower
+
+ * initscripts/RedHat/NetworkManager.in
+ - Use new --pid-file option
+ - Fix service stopping to wait a bit for NM to quit
+
+ * initscripts/RedHat/NetworkManagerDispatcher.in
+ - Use new --pid-file option
+
2006-02-26 Dan Williams <dcbw@redhat.com>
* src/Makefile.am
diff --git a/dispatcher-daemon/NetworkManagerDispatcher.c b/dispatcher-daemon/NetworkManagerDispatcher.c
index f10207c14e..5a83e29b72 100644
--- a/dispatcher-daemon/NetworkManagerDispatcher.c
+++ b/dispatcher-daemon/NetworkManagerDispatcher.c
@@ -280,15 +280,32 @@ static void nmd_print_usage (void)
}
+static gboolean
+write_pidfile (const char *pidfile)
+{
+ int fd;
+ int ignored;
+ char pid[16];
+
+ if ((fd = open (pidfile, O_CREAT | O_WRONLY, 00644)) < 0)
+ return FALSE;
+ snprintf (pid, sizeof (pid), "%d", getpid ());
+ ignored = write (fd, pid, strlen (pid));
+ close (fd);
+ return TRUE;
+}
+
+
/*
* main
*
*/
int main (int argc, char *argv[])
{
- gboolean become_daemon = TRUE;
- GMainLoop *loop = NULL;
+ gboolean become_daemon = TRUE;
+ GMainLoop * loop = NULL;
DBusConnection *connection = NULL;
+ char * pidfile = NULL;
/* Parse options */
while (1)
@@ -299,6 +316,7 @@ int main (int argc, char *argv[])
static struct option options[] = {
{"no-daemon", 0, NULL, 0},
+ {"pid-file", 1, NULL, 0},
{"help", 0, NULL, 0},
{NULL, 0, NULL, 0}
};
@@ -318,6 +336,8 @@ int main (int argc, char *argv[])
}
else if (strcmp (opt, "no-daemon") == 0)
become_daemon = FALSE;
+ else if (strcmp (opt, "pid-file") == 0)
+ pidfile = g_strdup (optarg);
else
{
nmd_print_usage ();
@@ -344,6 +364,13 @@ int main (int argc, char *argv[])
if (!g_thread_supported ())
g_thread_init (NULL);
+ if (pidfile)
+ {
+ if (!write_pidfile (pidfile))
+ nm_warning ("Couldn't write pid file %s! errno: %s", pidfile,
+ strerror (errno));
+ }
+
/* Connect to the NetworkManager dbus service and run the main loop */
if ((connection = nmd_dbus_init ()))
{
@@ -351,5 +378,10 @@ int main (int argc, char *argv[])
g_main_loop_run (loop);
}
+ /* Clean up pidfile */
+ if (pidfile)
+ unlink (pidfile);
+ g_free (pidfile);
+
return 0;
}
diff --git a/initscript/RedHat/NetworkManager.in b/initscript/RedHat/NetworkManager.in
index ea7475de24..4add42f537 100755
--- a/initscript/RedHat/NetworkManager.in
+++ b/initscript/RedHat/NetworkManager.in
@@ -37,17 +37,16 @@ start()
echo $"Setting network parameters... "
sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
echo -n $"Starting NetworkManager daemon: "
- daemon --check $servicename $processname
+ daemon --check $servicename $processname --pid-file=$pidfile
RETVAL=$?
echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$servicename && echo `/sbin/pidof $processname` > $pidfile
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$servicename
}
stop()
{
echo -n $"Stopping NetworkManager daemon: "
-
- killproc $servicename -TERM
+ killproc -p $pidfile $servicename
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
diff --git a/initscript/RedHat/NetworkManagerDispatcher.in b/initscript/RedHat/NetworkManagerDispatcher.in
index f391810926..31652d67e3 100755
--- a/initscript/RedHat/NetworkManagerDispatcher.in
+++ b/initscript/RedHat/NetworkManagerDispatcher.in
@@ -32,16 +32,15 @@ RETVAL=0
start()
{
echo -n $"Starting NetworkManagerDispatcher daemon: "
- daemon --check $servicename $processname
+ daemon --check $servicename $processname --pid-file=$pidfile
RETVAL=$?
echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$servicename && echo `/sbin/pidof $processname` > $pidfile
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$servicename
}
stop()
{
echo -n $"Stopping NetworkManagerDispatcher daemon: "
-
killproc $servicename -TERM
RETVAL=$?
echo
diff --git a/src/NetworkManager.c b/src/NetworkManager.c
index 18b84c0e9a..92e0bffbc3 100644
--- a/src/NetworkManager.c
+++ b/src/NetworkManager.c
@@ -495,28 +495,6 @@ static gboolean sigterm_pipe_handler (GIOChannel *src, GIOCondition condition, g
return FALSE;
}
-/*
- * nm_print_usage
- *
- * Prints program usage.
- *
- */
-static void nm_print_usage (void)
-{
- fprintf (stderr, "\n" "usage : NetworkManager [--no-daemon] [--help]\n");
- fprintf (stderr,
- "\n"
- " --no-daemon Don't become a daemon\n"
- " --enable-test-devices Allow dummy devices to be created via DBUS methods [DEBUG]\n"
- " --help Show this information and exit\n"
- "\n"
- "NetworkManager monitors all network connections and automatically\n"
- "chooses the best connection to use. It also allows the user to\n"
- "specify wireless access points which wireless cards in the computer\n"
- "should associate with.\n"
- "\n");
-}
-
static void nm_device_link_activated (NmNetlinkMonitor *monitor, const gchar *interface_name, NMData *data)
{
NMDevice *dev = NULL;
@@ -685,6 +663,47 @@ void nm_hal_deinit (NMData *data)
}
}
+
+static gboolean
+write_pidfile (const char *pidfile)
+{
+ int fd;
+ int ignored;
+ char pid[16];
+
+ if ((fd = open (pidfile, O_CREAT | O_WRONLY, 00644)) < 0)
+ return FALSE;
+ snprintf (pid, sizeof (pid), "%d", getpid ());
+ ignored = write (fd, pid, strlen (pid));
+ close (fd);
+ return TRUE;
+}
+
+
+/*
+ * nm_print_usage
+ *
+ * Prints program usage.
+ *
+ */
+static void nm_print_usage (void)
+{
+ fprintf (stderr, "\n" "usage : NetworkManager [--no-daemon] [--pid-file=<file>] [--help]\n");
+ fprintf (stderr,
+ "\n"
+ " --no-daemon Don't become a daemon\n"
+ " --pid-file=<path> Specify the location of a PID file\n"
+ " --enable-test-devices Allow dummy devices to be created via DBUS methods [DEBUG]\n"
+ " --help Show this information and exit\n"
+ "\n"
+ "NetworkManager monitors all network connections and automatically\n"
+ "chooses the best connection to use. It also allows the user to\n"
+ "specify wireless access points which wireless cards in the computer\n"
+ "should associate with.\n"
+ "\n");
+}
+
+
/*
* main
*
@@ -694,6 +713,7 @@ int main( int argc, char *argv[] )
gboolean become_daemon = TRUE;
gboolean enable_test_devices = FALSE;
char * owner;
+ char * pidfile = NULL;
if (getuid () != 0)
{
@@ -711,6 +731,7 @@ int main( int argc, char *argv[] )
static struct option options[] = {
{"no-daemon", 0, NULL, 0},
{"enable-test-devices", 0, NULL, 0},
+ {"pid-file", 1, NULL, 0},
{"help", 0, NULL, 0},
{NULL, 0, NULL, 0}
};
@@ -732,6 +753,8 @@ int main( int argc, char *argv[] )
become_daemon = FALSE;
else if (strcmp (opt, "enable-test-devices") == 0)
enable_test_devices = TRUE;
+ else if (strcmp (opt, "pid-file") == 0)
+ pidfile = g_strdup (optarg);
break;
default:
@@ -755,6 +778,13 @@ int main( int argc, char *argv[] )
if (!g_thread_supported ())
g_thread_init (NULL);
dbus_g_thread_init ();
+
+ if (pidfile)
+ {
+ if (!write_pidfile (pidfile))
+ nm_warning ("Couldn't write pid file %s! errno: %s", pidfile,
+ strerror (errno));
+ }
nm_logging_setup (become_daemon);
nm_info ("starting...");
@@ -826,5 +856,10 @@ int main( int argc, char *argv[] )
nm_data_free (nm_data);
nm_logging_shutdown ();
+ /* Clean up pidfile */
+ if (pidfile)
+ unlink (pidfile);
+ g_free (pidfile);
+
exit (0);
}