Commit graph

2980 commits

Author SHA1 Message Date
Simon McVittie
8304d4a064 Don't finalize sent or dispatched messages while under the connection lock
Finalizing a message can trigger callbacks; that's bad, if we have a
connection locked.

In particular, if a message is received by the "left side", passed to
the "right side" and sent (as in test/relay.c (see the diagram there)
or in dbus-daemon), then finalizing that message could result in the
live messages counter for the left side, and the outgoing messages counter
for the right side, both being decremented while under either side's
lock.

After a message is dispatched on the left side, finalizing it now drops
the lock temporarily, to avoid this problem.

After a message is sent on the right side, finalizing it is now deferred
until the right side unlocks, by moving it to a new queue of
"expired messages" which is automatically cleared every time we release
the lock.

The "live messages" counter for the "left" connection will now explicitly
take the left connection's lock before decrementing, to avoid
manipulating watches without a lock.

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34393
2011-07-28 18:23:35 +01:00
Simon McVittie
acf4056a42 Don't inline the contents of _dbus_connection_unlock
It's about to become more complex, to handle delayed deallocation of
messages in order to avoid triggering callbacks while locked.

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34393
2011-07-28 18:23:31 +01:00
Simon McVittie
ab3984d327 When attaching counters to messages, don't automatically notify callbacks
In all the places where counters are added, we're under a lock. The caller
knows what effect adding the counter might have, and can replicate it
in a lock-safe way if necessary.

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34393
2011-07-28 18:23:27 +01:00
Simon McVittie
6310774e98 Comment some places where it's OK to unref a message despite holding locks
In general, dbus_message_unref should be avoided while holding locks,
because it can invoke arbitrary user callbacks (via attached data, or
via DBusCounter).

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34393
2011-07-28 18:23:25 +01:00
Simon McVittie
0688924ed2 Add _dbus_counter_notify and call it after every adjustment
When fd-passing is implemented, adjustments happen in pairs; in that case
we coalesce the two calls into one.

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34393
2011-07-28 18:23:23 +01:00
Simon McVittie
429573e69a _dbus_connection_message_sent: rename to _unlocked
It's called with the connection's lock held.

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34393
2011-07-28 18:23:21 +01:00
Simon McVittie
150f1c1862 dbus_bus_register: don't unref the messages with the lock held
Finalizing a message can call out to user code via dbus_message_set_data
(or to internal code not expecting locks to be held, via DBusCounter).

Reviewed-by: Colin Walters <walters@verbum.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34393
2011-07-28 18:22:17 +01:00
Simon McVittie
72ee30d43b Merge branch 'dbus-1.4' 2011-07-28 16:24:11 +01:00
Simon McVittie
736ddc7f01 Add a note about bootstrapping new platforms to README 2011-07-28 16:23:19 +01:00
Simon McVittie
23cb3ecad3 Upgrade the type system into its own top-level section of the spec
The type system can be used independently, for instance in GVariant
(although GVariant's binary encoding is in fact not the same).

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38252
Reviewed-by: Lennart Poettering <lennart@poettering.net>
2011-07-28 12:18:50 +01:00
Simon McVittie
0d7318ccc7 Merge branch 'dbus-1.4' 2011-07-28 11:32:46 +01:00
Simon McVittie
4335a09280 man pages: replace all unescaped hyphen/minus characters with \-
In a man page, "-" officially means a typographical (Unicode) hyphen,
which frequently breaks the ability to copy and paste code examples from
a man page. "\-" means the ASCII hyphen/minus character. See
<http://lintian.debian.org/tags/hyphen-used-as-minus-sign.html> for
more details.

Rather than trying to distinguish between hyphens, em-dashes and
hyphen/minus, I just replaced all ambiguous hyphens with \- by applying
this vim command repeatedly until it didn't find anything:

     %s/\(^\|[^\\]\)-/\1\\-/g

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38284
Reviewed-by: Lennart Poettering <lennart@poettering.net>
2011-07-28 11:06:10 +01:00
Simon McVittie
638828526a Fix spelling/grammatical mistakes detected by Debian's lintian(1)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38284
Reviewed-by: Lennart Poettering <lennart@poettering.net>
2011-07-28 11:05:43 +01:00
Simon McVittie
2121ff07d5 Merge branch 'dbus-1.4' 2011-07-27 18:54:35 +01:00
Sascha Silbe
2c776890bf list_allows_user: fix debug output for groups
Signed-off-by: Sascha Silbe <sascha-pgp@silbe.org>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
2011-07-27 18:51:03 +01:00
Simon McVittie
6ca26b7700 Merge branch 'dbus-1.4'
Conflicts:
	dbus/dbus-message.c
2011-07-26 18:00:57 +01:00
Simon McVittie
104dc9383c NEWS 2011-07-26 17:59:23 +01:00
Simon McVittie
438595294c DBusMessage: always access refcount atomically, even for assertions/initial ref
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-26 17:42:16 +01:00
Simon McVittie
ef0f6ec935 dbus-memory: use atomic accesses to block count, even for assertions
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-26 17:41:38 +01:00
Simon McVittie
0a6e7cb982 Merge branch 'dbus-1.4' 2011-07-26 11:51:13 +01:00
Simon McVittie
b0f3874970 NEWS 2011-07-26 11:51:04 +01:00
Simon McVittie
a725cca0ac DBusConnection: use atomic accesses to refcount in assertions/initial ref
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-25 18:17:21 +01:00
Simon McVittie
dc6ae73598 dbus_message_ref: avoid unused variable if not asserting
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-25 18:17:12 +01:00
Simon McVittie
6f4aa18ec3 _dbus_connection_close_if_only_one_ref: use _dbus_atomic_get
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-25 18:16:51 +01:00
Simon McVittie
b997bf4ee2 Add _dbus_atomic_get implemented in terms of inc, dec
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-25 18:15:34 +01:00
Simon McVittie
c62b886119 DBusObjectTree: always access refcount atomically
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-25 18:10:02 +01:00
Simon McVittie
d70ba60027 dbus_message_unref: make an assertion more strict
We've just decremented the refcount, so it should have been at least 1
before we did that.

Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-25 18:09:29 +01:00
Simon McVittie
0ae863ef16 DBusMessageFilter: exclusively use atomic accesses to refcount
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
2011-07-25 18:08:17 +01:00
Simon McVittie
feb31a3321 Merge branch 'dbus-1.4' and update NEWS for master
Conflicts:
	NEWS
2011-07-18 19:42:35 +01:00
Simon McVittie
006dbd48fa NEWS 2011-07-18 19:33:00 +01:00
Simon McVittie
693e2fc463 Uninstall the installed docs
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=36156
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:24:52 +01:00
Simon McVittie
39b6b898c5 Install man2html output to $(htmldir)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=36156
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:24:47 +01:00
Simon McVittie
14dab0789e Install diagram.*, system-activation.txt to the $(docdir)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=36156
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:24:23 +01:00
Simon McVittie
53af0b903c Install xmlto output to $(htmldir) automatically
Also rename HTML_FILES to XMLTO_OUTPUT, as a more self-describing name:
we have other HTML files which are not the output from xmlto.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=36156
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:24:15 +01:00
Simon McVittie
37cb1522fe Install dbus.devhelp to $(htmldir), not $(apidir), and remove it in clean
It needs to be in $(htmldir) so that its relative paths will work.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=36156
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:23:45 +01:00
Simon McVittie
b9f38fd024 configure.ac: fix check for xsltproc
Pre-setting XSLTPROC interferes with AC_CHECK_PROGS letting the user
override choice of program via the environment.

Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=36156
2011-07-18 19:23:24 +01:00
Simon McVittie
d54ea8a41b Use EXEEXT when running tests from another directory, and skip bus-test-launch-helper on non-Unix
This is necessary when cross-compiling from Linux to mingw32 and running
the resulting tests under Wine. (This partially works! Some tests fail,
though.)

Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:14:59 +01:00
Simon McVittie
a45df5f10a Build docs after running tests, and remove redundant DIST_SUBDIRS
If DIST_SUBDIRS isn't set, it defaults to SUBDIRS, so it's just noise.

Running tests before building documentation is an easy way to speed up the
hack/make check/fix cycle, by not wasting time rebuilding the
documentation (which is often slow) until all the tests compile and pass.

https://bugs.freedesktop.org/show_bug.cgi?id=34405
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:14:57 +01:00
Simon McVittie
b354cfc84a Run bus tests from test/
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34405
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:14:55 +01:00
Simon McVittie
e07a8f8e44 Run dbus-test from test/, not dbus/
This avoids failures caused by test/data not having been set up yet.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34405
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:14:54 +01:00
Simon McVittie
68b17dbb4c dbus tests: don't warn on skipped tests
We should treat _dbus_warn as fatal when we run tests, like bus/ does.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34405
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:14:52 +01:00
Simon McVittie
cf9ee7ae80 test/Makefile.am: list tests one per line
This improves clarity, and makes conflicts less likely and merges more
obviously correct.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34405
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:14:49 +01:00
Simon McVittie
41d7854cea Opt-in to modern OS features on Solaris, to get file descriptor passing
Surely it's broken to define SCM_RIGHTS but not the necessary structs to
do something useful with it, but whatever.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=33465
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
2011-07-18 19:14:47 +01:00
Simon McVittie
377051ee79 _dbus_open_unix_socket: make static
It isn't called from outside its translation unit.
2011-07-18 15:16:00 +01:00
Simon McVittie
1423b4a64d _dbus_open_tcp_socket: remove
It's only implemented on Unix, internal to dbus, and never called.
2011-07-18 15:15:58 +01:00
Simon McVittie
c774ca2101 Merge branch 'dbus-1.4' 2011-07-18 15:15:45 +01:00
Simon McVittie
af13ae7e43 _dbus_connect_tcp_socket_with_nonce: don't create an extra fd (which is then leaked)
This block should have been deleted in 2007, when IPv6 support was added:
previously, the fd allocated at the beginning of the function was used
for connect(), but for IPv6 support, the socket() call has to be inside
the loop over getaddrinfo() results so its address family can be changed.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=37258
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
2011-07-18 15:11:47 +01:00
Simon McVittie
e9197996fe Merge branch 'dbus-1.4' 2011-07-14 16:49:02 +01:00
Simon McVittie
c6c1874179 DBusServer: exclusively use atomic operations on the refcount
Same reasoning as for fd.o #38005, commit 50732523a7.

Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
Bug-NB: NB#263436
2011-07-14 16:37:46 +01:00
Simon McVittie
6d65b409f9 DBusPendingCall: exclusively use atomic operations on the refcount
Same reasoning as for fd.o #38005, commit 50732523a7.

Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
Bug-NB: NB#263436
2011-07-14 16:37:05 +01:00