diff options
author | Colin Walters <walters@verbum.org> | 2004-10-29 19:59:15 +0000 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2004-10-29 19:59:15 +0000 |
commit | e430788a6bfb50c628825cdf6e09476e41dc1a78 (patch) | |
tree | 8e2a4623d1acf89fa157ecb1e3ca952e45a49cad | |
parent | fbc29a8a78edae303e997f1a98d6b4618ea7868a (diff) | |
download | dbus-e430788a6bfb50c628825cdf6e09476e41dc1a78.tar.gz |
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-- | ChangeLog | 10 | ||||
-rw-r--r-- | bus/bus.c | 4 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.c | 38 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.h | 1 |
4 files changed, 52 insertions, 1 deletions
@@ -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 @@ -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, |