diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-02-19 19:49:19 +0000 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-02-19 19:49:22 +0000 |
commit | 13757b43e99578bde64c219dfb9cbebd93537da7 (patch) | |
tree | db0cb611a485da80bd89626fcf114c98a4a530b3 | |
parent | e995c1cb20fac30aa378365394aa986498658abb (diff) | |
parent | 9565ce08c927a6b2c38698a8e9cb16cf394f0084 (diff) |
Merge branch 'decloak'
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
-rw-r--r-- | src/presence-cache.c | 9 |
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 { |