# HG changeset patch # User Sean Egan # Date 1187054315 0 # Node ID 771423734d6acebabfb31c437ffdfadc4f8986af # Parent 6e3cd5e804206637248652a6f3bd1281074a23f4# Parent f5d9b9bbf5fda3444f54896b11b713f24b29cee7 merge of '5af486724d98e56d56d8754e0b3d06d5f48b88d4' and 'd2728075ea812d40b40b69e2fddd0d441676ec5f' diff -r f5d9b9bbf5fd -r 771423734d6a libpurple/protocols/bonjour/jabber.c --- a/libpurple/protocols/bonjour/jabber.c Tue Aug 14 01:18:10 2007 +0000 +++ b/libpurple/protocols/bonjour/jabber.c Tue Aug 14 01:18:35 2007 +0000 @@ -371,6 +371,8 @@ purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", pb->name); + g_return_if_fail(bb != NULL); + /* Close the socket, clear the watcher and free memory */ bonjour_jabber_close_conversation(bb->conversation); bb->conversation = NULL; diff -r f5d9b9bbf5fd -r 771423734d6a libpurple/protocols/bonjour/parser.c --- a/libpurple/protocols/bonjour/parser.c Tue Aug 14 01:18:10 2007 +0000 +++ b/libpurple/protocols/bonjour/parser.c Tue Aug 14 01:18:35 2007 +0000 @@ -82,6 +82,11 @@ } } +static gboolean _async_bonjour_jabber_stream_ended_cb(gpointer data) { + bonjour_jabber_stream_ended((PurpleBuddy *) data); + return FALSE; +} + static void bonjour_parser_element_end_libxml(void *user_data, const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace) @@ -94,7 +99,9 @@ /* We don't keep a reference to the start stream xmlnode, * so we have to check for it here to close the conversation */ if(!xmlStrcmp(element_name, (xmlChar*) "stream")) { - bonjour_jabber_stream_ended(pb); + /* Asynchronously close the conversation to prevent bonjour_parser_setup() + * being called from within this context */ + g_idle_add(_async_bonjour_jabber_stream_ended_cb, pb); } return; }