A Red Hat QA engineer hit in practice a race condition in dbus-uuidgen
where it could leave an empty file.
dbus-uuidgen (_dbus_create_uuid_file_exclusively) formerly created an
empty file in the path to the uuid, then filled it in. At some point,
the internal libdbus _dbus_string_save_to_file became atomic on Unix
at least (doing the save to temp file, fsync(), rename() dance).
So _dbus_create_uuid_file_exclusively doesn't need to create the file
beforehand anymore. However, it *does* need the file to be
world-readable, unlike all other consumers of
_dbus_string_save_to_file. So add a "world_readable" argument.
This adds explanations for --address and --systemd-activation which have
recently been added to the daemon. Also adds coumentation for --nofork
and --introspect which has been previously forgotten.
This is a pretty straightforward implementation of systemd-style socket
activation using the reference implementation of the
$LISTEN_FDS/$LISTEN_PID env var parsing as supplied by systemd upstream.
This helps to avoid 'Address already in use' problems if server has been shut
down, and then restarted while sockets are still active on its port.
Signed-off-by: Steffen Sledz <sledz@dresearch.de>
Patch based on patch by Havoc Pennington, with the references that
this is temporary removed.
Patch based on one from Olivier Hochreutiner <olivier.hochreutiner
gmail.com>
* dbus/dbus-connection.c (protected_change_timeout): remove the
elaborate nonworking hack to try to drop locks and just keep the
locks; this isn't right either, but at least is correct, though
it puts restrictions on apps.
* dbus/dbus-connection.c (protected_change_watch): make the same
change as for timeouts
* dbus/dbus-connection.c (dbus_connection_set_timeout_functions):
don't drop the lock here; add documentation of the problem to API
docs
(dbus_connection_set_watch_functions): same
* dbus/dbus-connection.c (dbus_connection_get_data)
(dbus_connection_set_data): introduce a separate slot_mutex
protecting connection->slot_list so these two functions can be
called inside watch and timeout functions. Not sure this
is going to be a good idea.
* dbus/dbus-connection.c (dbus_connection_unref)
(dbus_connection_ref): avoid using connection lock in ref/unref
so these can also be used in watch and timeout functions
We already export the session services dir in the .pc file, add the
system services dir too, as well as the interfaces dir, so that packages
can drop their files into the right place.
Eventually we need to move the system-services dir to a place that is
relocatable to /lib/dbus, and this change makes the location queriable
for other projects, as a first step towards that goal.