diff options
author | Havoc Pennington <hp@redhat.com> | 2007-08-17 16:43:57 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2007-08-17 16:43:57 +0000 |
commit | 163555c7ab56132ee27e3e7d9a26eb985682c1b5 (patch) | |
tree | 6beb4d2f273fd36bff3c5bca6d5676759deaaa1c /bus | |
parent | d9f2438806d0b2584003a3c3a54234c5a1fac4c2 (diff) |
2007-08-17 Havoc Pennington <hp@redhat.com>
* tools/dbus-launch-x11.c (set_address_in_x11): fix from Michael
Lorenz to use long not int with XChangeProperty format 32
* dbus/dbus-sysdeps-util-unix.c
(_dbus_write_pid_to_file_and_pipe): factor this out, and use the
same code in _dbus_become_daemon (where the parent writes the pid
file and to the pid pipe) and in bus_context_new (where the daemon
writes its own pid file and to its own pid pipe)
* bus/bus.c (bus_context_new): close the pid pipe after we print
to it. Also, don't write the pid to the pipe twice when we fork,
someone reported this bug a long time ago.
Diffstat (limited to 'bus')
-rw-r--r-- | bus/bus.c | 116 | ||||
-rw-r--r-- | bus/main.c | 4 |
2 files changed, 47 insertions, 73 deletions
@@ -665,7 +665,7 @@ bus_context_new (const DBusString *config_file, if (!_dbus_pipe_is_stdout_or_stderr (print_addr_pipe)) _dbus_pipe_close (print_addr_pipe, NULL); - + _dbus_string_free (&addr); } @@ -695,78 +695,48 @@ bus_context_new (const DBusString *config_file, } } - /* Now become a daemon if appropriate */ - if ((force_fork != FORK_NEVER && context->fork) || force_fork == FORK_ALWAYS) - { - DBusString u; - - if (context->pidfile) - _dbus_string_init_const (&u, context->pidfile); - - if (!_dbus_become_daemon (context->pidfile ? &u : NULL, - print_pid_pipe, - error)) - { - _DBUS_ASSERT_ERROR_IS_SET (error); - goto failed; - } - } - else - { - /* Need to write PID file for ourselves, not for the child process */ - if (context->pidfile != NULL) - { - DBusString u; - - _dbus_string_init_const (&u, context->pidfile); - - if (!_dbus_write_pid_file (&u, _dbus_getpid (), error)) - { - _DBUS_ASSERT_ERROR_IS_SET (error); - goto failed; - } - } - } - - /* Write PID if requested */ - if (print_pid_pipe != NULL && _dbus_pipe_is_valid (print_pid_pipe)) - { - DBusString pid; - int bytes; - - if (!_dbus_string_init (&pid)) - { - BUS_SET_OOM (error); - goto failed; - } - - if (!_dbus_string_append_int (&pid, _dbus_getpid ()) || - !_dbus_string_append (&pid, "\n")) - { - _dbus_string_free (&pid); - BUS_SET_OOM (error); - goto failed; - } - - bytes = _dbus_string_get_length (&pid); - if (_dbus_pipe_write (print_pid_pipe, &pid, 0, bytes, error) != bytes) - { - /* pipe_write sets error on failure but not short write */ - if (error != NULL && !dbus_error_is_set (error)) - { - dbus_set_error (error, DBUS_ERROR_FAILED, - "Printing message bus PID: did not write enough bytes\n"); - } - _dbus_string_free (&pid); - goto failed; - } - - if (!_dbus_pipe_is_stdout_or_stderr (print_pid_pipe)) - _dbus_pipe_close (print_pid_pipe, NULL); - - _dbus_string_free (&pid); - } - + /* Now become a daemon if appropriate and write out pid file in any case */ + { + DBusString u; + + if (context->pidfile) + _dbus_string_init_const (&u, context->pidfile); + + if ((force_fork != FORK_NEVER && context->fork) || force_fork == FORK_ALWAYS) + { + _dbus_verbose ("Forking and becoming daemon\n"); + + if (!_dbus_become_daemon (context->pidfile ? &u : NULL, + print_pid_pipe, + error)) + { + _DBUS_ASSERT_ERROR_IS_SET (error); + goto failed; + } + } + else + { + _dbus_verbose ("Fork not requested\n"); + + /* Need to write PID file and to PID pipe for ourselves, + * not for the child process. This is a no-op if the pidfile + * is NULL and print_pid_pipe is NULL. + */ + if (!_dbus_write_pid_to_file_and_pipe (context->pidfile ? &u : NULL, + print_pid_pipe, + _dbus_getpid (), + error)) + { + _DBUS_ASSERT_ERROR_IS_SET (error); + goto failed; + } + } + } + + if (print_pid_pipe && _dbus_pipe_is_valid (print_pid_pipe) && + !_dbus_pipe_is_stdout_or_stderr (print_pid_pipe)) + _dbus_pipe_close (print_pid_pipe, NULL); + if (!process_config_postinit (context, parser, error)) { _DBUS_ASSERT_ERROR_IS_SET (error); @@ -452,6 +452,10 @@ main (int argc, char **argv) exit (1); } + /* bus_context_new() closes the print_addr_pipe and + * print_pid_pipe + */ + setup_reload_pipe (bus_context_get_loop (context)); _dbus_set_signal_handler (SIGHUP, signal_handler); |