summaryrefslogtreecommitdiff
path: root/recipes/dbus/dbus-1.3.0/will-3.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/dbus/dbus-1.3.0/will-3.patch')
-rw-r--r--recipes/dbus/dbus-1.3.0/will-3.patch119
1 files changed, 119 insertions, 0 deletions
diff --git a/recipes/dbus/dbus-1.3.0/will-3.patch b/recipes/dbus/dbus-1.3.0/will-3.patch
new file mode 100644
index 0000000000..80e1f33a03
--- /dev/null
+++ b/recipes/dbus/dbus-1.3.0/will-3.patch
@@ -0,0 +1,119 @@
+From 8946958989828312ecf58dbaa581cbcebea8bcea Mon Sep 17 00:00:00 2001
+From: Will Thompson <will.thompson@collabora.co.uk>
+Date: Wed, 29 Jul 2009 17:53:37 +0100
+Subject: [PATCH 3/6] Don't bother re-matching features we've checked.
+
+This is currently not a big deal, but will make more of a difference
+once the set of match rules is partitioned by more features than just
+the message type.
+---
+ bus/signals.c | 29 ++++++++++++++++++-----------
+ 1 files changed, 18 insertions(+), 11 deletions(-)
+
+diff --git a/bus/signals.c b/bus/signals.c
+index 10e0b5e..0509dd5 100644
+--- a/bus/signals.c
++++ b/bus/signals.c
+@@ -1369,8 +1369,11 @@ static dbus_bool_t
+ match_rule_matches (BusMatchRule *rule,
+ DBusConnection *sender,
+ DBusConnection *addressed_recipient,
+- DBusMessage *message)
++ DBusMessage *message,
++ BusMatchFlags already_matched)
+ {
++ int flags;
++
+ /* All features of the match rule are AND'd together,
+ * so FALSE if any of them don't match.
+ */
+@@ -1379,8 +1382,11 @@ match_rule_matches (BusMatchRule *rule,
+ * or for addressed_recipient may mean a message with no
+ * specific recipient (i.e. a signal)
+ */
+-
+- if (rule->flags & BUS_MATCH_MESSAGE_TYPE)
++
++ /* Don't bother re-matching features we've already checked implicitly. */
++ flags = rule->flags & (~already_matched);
++
++ if (flags & BUS_MATCH_MESSAGE_TYPE)
+ {
+ _dbus_assert (rule->message_type != DBUS_MESSAGE_TYPE_INVALID);
+
+@@ -1388,7 +1394,7 @@ match_rule_matches (BusMatchRule *rule,
+ return FALSE;
+ }
+
+- if (rule->flags & BUS_MATCH_INTERFACE)
++ if (flags & BUS_MATCH_INTERFACE)
+ {
+ const char *iface;
+
+@@ -1402,7 +1408,7 @@ match_rule_matches (BusMatchRule *rule,
+ return FALSE;
+ }
+
+- if (rule->flags & BUS_MATCH_MEMBER)
++ if (flags & BUS_MATCH_MEMBER)
+ {
+ const char *member;
+
+@@ -1416,7 +1422,7 @@ match_rule_matches (BusMatchRule *rule,
+ return FALSE;
+ }
+
+- if (rule->flags & BUS_MATCH_SENDER)
++ if (flags & BUS_MATCH_SENDER)
+ {
+ _dbus_assert (rule->sender != NULL);
+
+@@ -1433,7 +1439,7 @@ match_rule_matches (BusMatchRule *rule,
+ }
+ }
+
+- if (rule->flags & BUS_MATCH_DESTINATION)
++ if (flags & BUS_MATCH_DESTINATION)
+ {
+ const char *destination;
+
+@@ -1456,7 +1462,7 @@ match_rule_matches (BusMatchRule *rule,
+ }
+ }
+
+- if (rule->flags & BUS_MATCH_PATH)
++ if (flags & BUS_MATCH_PATH)
+ {
+ const char *path;
+
+@@ -1470,7 +1476,7 @@ match_rule_matches (BusMatchRule *rule,
+ return FALSE;
+ }
+
+- if (rule->flags & BUS_MATCH_ARGS)
++ if (flags & BUS_MATCH_ARGS)
+ {
+ int i;
+ DBusMessageIter iter;
+@@ -1567,7 +1573,8 @@ get_recipients_from_list (DBusList **rules,
+ #endif
+
+ if (match_rule_matches (rule,
+- sender, addressed_recipient, message))
++ sender, addressed_recipient, message,
++ BUS_MATCH_MESSAGE_TYPE))
+ {
+ _dbus_verbose ("Rule matched\n");
+
+@@ -2004,7 +2011,7 @@ check_matches (dbus_bool_t expected_to_match,
+ _dbus_assert (rule != NULL);
+
+ /* We can't test sender/destination rules since we pass NULL here */
+- matched = match_rule_matches (rule, NULL, NULL, message);
++ matched = match_rule_matches (rule, NULL, NULL, message, 0);
+
+ if (matched != expected_to_match)
+ {
+--
+1.6.3.3
+