mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-06 23:30:16 +01:00
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)
This commit is contained in:
parent
fbc29a8a78
commit
e430788a6b
4 changed files with 52 additions and 1 deletions
10
ChangeLog
10
ChangeLog
|
|
@ -1,3 +1,13 @@
|
|||
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>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue