diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-05-28 19:45:59 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-05-28 19:45:59 +0100 |
commit | ffb1d3310d97bc4d86a09604649f334e3367816f (patch) | |
tree | cd87f791228613a15491a3f7538a2e5cf2e5b5b7 /dbus/bus.py | |
parent | 03bcbff71d4bf112441dfd53300328c70d3a512c (diff) | |
download | dbus-python-ffb1d3310d97bc4d86a09604649f334e3367816f.tar.gz |
dbus.connection: Release signals lock before calling _clean_up_signal_match().
This prevents a deadlock when a signal match that's tracking name owner
changes is removed, causing a match on NameOwnerChanged to be removed too.
(Debian bug#426412)
Also move more of the tree manipulation inside the lock, to be nice to
anyone attempting a port to implementations without a GIL (mainly IronPython),
and add a regression test for the above bug.
Diffstat (limited to 'dbus/bus.py')
-rw-r--r-- | dbus/bus.py | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/dbus/bus.py b/dbus/bus.py index 9313289..04180a4 100644 --- a/dbus/bus.py +++ b/dbus/bus.py @@ -147,7 +147,7 @@ class BusConnection(Connection): return match def _clean_up_signal_match(self, match): - # The signals lock must be held. + # The signals lock is no longer held here (it was in <= 0.81.0) self.remove_match_string(str(match)) watch = self._signal_sender_matches.pop(match, None) if watch is not None: |