summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2004-10-29 19:59:15 +0000
committerColin Walters <walters@verbum.org>2004-10-29 19:59:15 +0000
commite430788a6bfb50c628825cdf6e09476e41dc1a78 (patch)
tree8e2a4623d1acf89fa157ecb1e3ca952e45a49cad
parentfbc29a8a78edae303e997f1a98d6b4618ea7868a (diff)
2004-10-29 Colin Walters <walters@redhat.com>
* dbus/dbus-sysdeps.h (_dbus_become_daemon): Also take parameter for fd to write pid to. * dbus/dbus-sysdeps.c (_dbus_become_daemon): Implement it. * bus/bus.c (bus_context_new): Pass print_pid_fd to _dbus_become_daemon (bug #1720)
-rw-r--r--ChangeLog10
-rw-r--r--bus/bus.c4
-rw-r--r--dbus/dbus-sysdeps.c38
-rw-r--r--dbus/dbus-sysdeps.h1
4 files changed, 52 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 2c54efa9..eeb1d54c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2004-10-29 Colin Walters <walters@redhat.com>
+ * dbus/dbus-sysdeps.h (_dbus_become_daemon): Also take
+ parameter for fd to write pid to.
+
+ * dbus/dbus-sysdeps.c (_dbus_become_daemon): Implement it.
+
+ * bus/bus.c (bus_context_new): Pass print_pid_fd
+ to _dbus_become_daemon (bug #1720)
+
+2004-10-29 Colin Walters <walters@redhat.com>
+
Patch from Ed Catmur <ed@catmur.co.uk>
* mono/doc/Makefile.am (install-data-local): Handle
diff --git a/bus/bus.c b/bus/bus.c
index 043f2e1e..b34e635c 100644
--- a/bus/bus.c
+++ b/bus/bus.c
@@ -663,7 +663,9 @@ bus_context_new (const DBusString *config_file,
if (context->pidfile)
_dbus_string_init_const (&u, context->pidfile);
- if (!_dbus_become_daemon (context->pidfile ? &u : NULL, error))
+ if (!_dbus_become_daemon (context->pidfile ? &u : NULL,
+ print_pid_fd,
+ error))
{
_DBUS_ASSERT_ERROR_IS_SET (error);
goto failed;
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c
index e1b786f0..2bdd8171 100644
--- a/dbus/dbus-sysdeps.c
+++ b/dbus/dbus-sysdeps.c
@@ -3131,11 +3131,13 @@ _dbus_print_backtrace (void)
* Does the chdir, fork, setsid, etc. to become a daemon process.
*
* @param pidfile #NULL, or pidfile to create
+ * @param print_pid_fd file descriptor to print pid to, or -1 for none
* @param error return location for errors
* @returns #FALSE on failure
*/
dbus_bool_t
_dbus_become_daemon (const DBusString *pidfile,
+ int print_pid_fd,
DBusError *error)
{
const char *s;
@@ -3201,6 +3203,42 @@ _dbus_become_daemon (const DBusString *pidfile,
return FALSE;
}
}
+
+ /* Write PID if requested */
+ if (print_pid_fd >= 0)
+ {
+ DBusString pid;
+ int bytes;
+
+ if (!_dbus_string_init (&pid))
+ {
+ _DBUS_SET_OOM (error);
+ kill (child_pid, SIGTERM);
+ return FALSE;
+ }
+
+ if (!_dbus_string_append_int (&pid, _dbus_getpid ()) ||
+ !_dbus_string_append (&pid, "\n"))
+ {
+ _dbus_string_free (&pid);
+ _DBUS_SET_OOM (error);
+ kill (child_pid, SIGTERM);
+ return FALSE;
+ }
+
+ bytes = _dbus_string_get_length (&pid);
+ if (_dbus_write (print_pid_fd, &pid, 0, bytes) != bytes)
+ {
+ dbus_set_error (error, DBUS_ERROR_FAILED,
+ "Printing message bus PID: %s\n",
+ _dbus_strerror (errno));
+ _dbus_string_free (&pid);
+ kill (child_pid, SIGTERM);
+ return FALSE;
+ }
+
+ _dbus_string_free (&pid);
+ }
_dbus_verbose ("parent exiting\n");
_exit (0);
break;
diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h
index 7e89d61b..5227a697 100644
--- a/dbus/dbus-sysdeps.h
+++ b/dbus/dbus-sysdeps.h
@@ -298,6 +298,7 @@ dbus_bool_t _dbus_close (int fd,
void _dbus_print_backtrace (void);
dbus_bool_t _dbus_become_daemon (const DBusString *pidfile,
+ int print_pid_fd,
DBusError *error);
dbus_bool_t _dbus_write_pid_file (const DBusString *filename,
unsigned long pid,