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.
Thiago Macieira [Tue, 22 Jun 2010 13:13:23 +0000 (15:13 +0200)]
Fix the reentrancy issue reported on bug 17754.
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
pkg-config: add a couple of additional variables to .pc
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.
Will Thompson [Thu, 17 Jun 2010 13:45:16 +0000 (14:45 +0100)]
Fix dbus-sysdeps.h on amd64, again.
HAVE_STDINT_H is defined in config.h, but that's not much use if
config.h isn't included. The new file dbus/dbus-config.c includes this
header without including config.h first, so fails to build.
Since dbus-sysdeps.h is internal, we can include config.h with impunity,
rather than relying on our callers to do so. Also, there's no need to
include stdint.h twice.
Ralf Habacker [Mon, 14 Jun 2010 16:27:04 +0000 (18:27 +0200)]
Bug 28460 - Refactored dbus configuration access.
Libdbus uses several config variables. On unix these settings are read from
environment variables by using _dbus_getenv.
On other platforms like wince there are no environment variables available and
_dbus_getenv needs an emulation for those plattforms (see
dbus/dbus-sysdeps-wince-glue.c)
To cleanup this emulation the appended patch adds a config api by adding
_dbus_config_... functions.
Also having all client config related functions listed in one header file
provides a good overview about which config attributes are available.
The default implementation retrieves the config values from environment
variables. For other os this could be easily extended or replaced by.
Corrected thread problem causing some calls to hang for 25s
Since the connection lock is released for a short while in
_dbus_connection_acquire_io_path there can already be a method return
received by another thread. The fix is to do an extra check after the
I/O path has been aquired both.
Corrected thread problem causing some calls to hang for 25s
Since the connection lock is released for a short while in
_dbus_connection_acquire_io_path there can already be a method return
received by another thread. The fix is to do an extra check after the
I/O path has been aquired both.
num_fds is the number of elements of dirs currently in use. This bug
meant that encountering a previously un-watched directory would cause j
to increment forever, and so dirs[j] would eventually segfault.
(I've checked the corresponding code for inotify, and it's correct. I
wonder if some of the duplication could be eliminated.)
Thanks to Pablo Martí Gamboa <pmarti@warp.es> for reporting this issue!
David Zeuthen [Thu, 13 May 2010 14:25:22 +0000 (10:25 -0400)]
Add an extra parameter to the PropertiesChanged() signal
It was pointed out on the mailing list that it would be useful to know
that a given property has changed without conveying its value. Because
without this parameter a true_no_value property could change, however
there is no way for a client-side proxy to know _what_ property it was
(only that some property changed).
With the parameter, however, a client-side proxy can reliably discard
a cached property value.
Also rename the "true_no_value" to "invalidates" as the spec is now
using this language.
Also allow using the annotation in the enclosed interface name.
Also rename the annotation name so it uses Property in its name
instead of Properties. This is to be more consistent with the existing
org.freedesktop.DBus.Method.NoReply annotation which uses Method, not
Methods.
David Zeuthen [Fri, 7 May 2010 16:50:47 +0000 (12:50 -0400)]
Add an optional PropertiesChanged() signal
Some notes about this new signal
- The PropertiesChanged() signal is optional. An application can
convey support for this signal by either including or excluding it
from the returned introspection data much like apps not supporting
(or predating) the GetAll() method does not include GetAll() in the
introspection data.
- An object can use PropertiesChanged() but opt out of using it for
one or more properties by using the
Ray Strode [Mon, 10 May 2010 14:12:45 +0000 (10:12 -0400)]
Add clarification to spec about UpdateActivationEnvironment
UpdateActivationEnvironment takes a a{ss}. This means only
valid UTF-8 can be used. Environment variables are normally
ascii, but in theory have no specific encoding to them. This
means that certain valid environment variables can't be sent
to the bus for updating its activation environment.
This commit just adds a note to the spec explaining this
restriction.
Cmake support for cross plattform usable test files.
Recent test configuration files contains 'unix:...'
bus adresses which do not work on windows.
For cross plattform usable test files the whole
listen tag entry has to be set by the build system,
which is available with a new build system variable
named TEST_LISTEN.
To have the client client side definition in sync,
TEST_CONNECTION has been moved from c file into cmake
build system.
If there is a *.cmake test file available for
a related *.in file, take the *.cmake test file
instead of the *.in file as test file source.
Also added some messages.