[Bug 30466] New: Crashes if a PEP alias request and a PEP location request are outstanding when we disconnect
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Wed Sep 29 18:07:41 CEST 2010
https://bugs.freedesktop.org/show_bug.cgi?id=30466
Summary: Crashes if a PEP alias request and a PEP location
request are outstanding when we disconnect
Product: Telepathy
Version: 0.10
Platform: Other
OS/Version: All
Status: NEW
Severity: normal
Priority: medium
Component: gabble
AssignedTo: telepathy-bugs at lists.freedesktop.org
ReportedBy: will.thompson at collabora.co.uk
QAContact: telepathy-bugs at lists.freedesktop.org
I was smoke-testing 0.10.1 today — in particular, testing disconnecting just
after connecting — and it crashed.
Here's the backtrace:
#0 gabble_request_pipeline_enqueue (pipeline=0x0, msg=0x7fffe8c80990,
timeout=180, callback=0x4a8d60 <pipeline_reply_cb>, user_data=0x41b9440)
at request-pipeline.c:406
#1 0x00000000004a7535 in request_send (request=0x41b9440, timeout=180)
at vcard-manager.c:1519
#2 0x00000000004a773a in gabble_vcard_manager_request (self=0x1422570,
handle=53, timeout=180, callback=<value optimized out>,
user_data=<value optimized out>, object=0x79ade0) at vcard-manager.c:1579
#3 0x0000000000468c1a in pep_request_cb (conn=0x0, msg=0x7fffe8c80990,
user_data=0x1674e40, error=0x4a8d60) at conn-aliasing.c:326
#4 0x000000000049b20e in gabble_request_pipeline_dispose (object=0x216b400)
at request-pipeline.c:237
#5 0x00007ffff667556a in g_object_unref (_object=<value optimized out>)
at /glib2.0-2.25.12/gobject/gobject.c:2543
#6 0x000000000046d64e in gabble_connection_dispose (object=0x79ade0)
at connection.c:1105
#7 0x00007ffff667556a in g_object_unref (_object=<value optimized out>)
at /glib2.0-2.25.12/gobject/gobject.c:2543
#8 0x00000000004d78ba in pep_reply_cb (source=0x145ce30,
res=<value optimized out>, user_data=<value optimized out>)
at conn-location.c:106
#9 0x00000000004b1ca7 in send_query_cb (source=0x16ea140, res=0x41f65e0,
user_data=<value optimized out>) at wocky-pep-service.c:296
#10 0x00007ffff6b40b2c in complete_in_idle_cb (data=0x41f65e0)
at /glib2.0-2.25.12/gio/gsimpleasyncresult.c:597
Here's this backtrace in human-readable form, from bottom to top, in three
acts.
== The Pledge ==
• We've disconnected, so the porter calls the PEP service's failure callback in
an idle;
• the location code gets informed of this failure, and so drops its ref on the
connection;
• thus, the connection dies.
== The Turn ==
• The death of the connection leads to the death of Gabble's request pipeline;
• which contained a request for a PEP alias.
• The next stack frame is missing (due to a tail call optimization, I think),
but based on what's to come, it must have been aliases_request_basic_pep_cb().
== The Prestige ==
• aliases_request_basic_pep_cb() sees that getting the contact's alias by PEP
failed;
• so it decides that it should go and get the contact's vCard;
• but gabble_vcard_manager_request() blows up when trying to send the request
because the connection's request pipeline pointer was set to NULL *before*
being unreffed (since that's how tp_clear_object() works).
This is kind of a mess, and I'm not sure what the best place in this chain to
fix this bug is.
--
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the telepathy-bugs
mailing list