summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2010-02-19 19:49:19 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2010-02-19 19:49:22 +0000
commit13757b43e99578bde64c219dfb9cbebd93537da7 (patch)
treedb0cb611a485da80bd89626fcf114c98a4a530b3
parente995c1cb20fac30aa378365394aa986498658abb (diff)
parent9565ce08c927a6b2c38698a8e9cb16cf394f0084 (diff)
Merge branch 'decloak'
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
-rw-r--r--src/presence-cache.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/presence-cache.c b/src/presence-cache.c
index 9d04888fd..2b32969cd 100644
--- a/src/presence-cache.c
+++ b/src/presence-cache.c
@@ -1215,6 +1215,13 @@ _caps_disco_cb (GabbleDisco *disco,
if (trust >= CAPABILITY_BUNDLE_ENOUGH_TRUST)
{
+ /* Remove the node from the hash table without freeing it. This needs
+ * to be done before emitting the signal, so that when recipients of
+ * the capabilities-discovered signal ask whether we're unsure about
+ * the handle, there is no pending disco request that would make us
+ * unsure. */
+ g_hash_table_steal (priv->disco_pending, node);
+
/* We trust this caps node. Serve all its waiters. */
for (i = waiters; NULL != i; i = i->next)
{
@@ -1224,7 +1231,7 @@ _caps_disco_cb (GabbleDisco *disco,
emit_capabilities_discovered (cache, waiter->handle);
}
- g_hash_table_remove (priv->disco_pending, node);
+ disco_waiter_list_free (waiters);
}
else
{