[Bug 37078] New: crashes if connecting fails just before it succeeds
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Tue May 10 19:51:28 CEST 2011
https://bugs.freedesktop.org/show_bug.cgi?id=37078
Summary: crashes if connecting fails just before it succeeds
Product: Telepathy
Version: 0.13
Platform: Other
OS/Version: All
Status: ASSIGNED
Severity: normal
Priority: medium
Component: gabble
AssignedTo: simon.mcvittie at collabora.co.uk
ReportedBy: simon.mcvittie at collabora.co.uk
QAContact: telepathy-bugs at lists.freedesktop.org
We've seen some Gabble crash-dumps with these criticals logged (in the
configuration where they were reported, they're non-fatal):
May 5 13:04:07 (none) telepathy-gabble[23476]: GLIB CRITICAL ** tp-glib -
tp_base_connection_add_interfaces: assertion `self->status !=
TP_CONNECTION_STATUS_DISCONNECTED' failed
May 5 13:04:07 (none) telepathy-gabble[23476]: GLIB CRITICAL ** tp-glib -
tp_base_connection_change_status: assertion `prev_status ==
TP_CONNECTION_STATUS_CONNECTING' failed
and then an abort caused by this assertion failure:
"(base->status == TP_CONNECTION_STATUS_DISCONNECTED) ||
(base->status == TP_INTERNAL_CONNECTION_STATUS_NEW)"
The reason that assertion should be OK is that GabbleConnectionManager holds a
ref to every GabbleConnection, from before the time it moves to CONNECTED until
after the time it moves to DISCONNECTED. The life-cycle is NEW -> CONNECTING ->
CONNECTED -> DISCONNECTED, except that you can also become DISCONNECTED from
any earlier state.
It looks as though the two criticals I quoted can only happen if:
* set_status_to_connected is called when we already DISCONNECTED
* which requires decrement_waiting_connected when we already DISCONNECTED
s_s_t_c should bail out early if we already DISCONNECTED; that's a Gabble bug.
Meanwhile, telepathy-glib's tp_base_connection_change_status() can critical()
but already have had its side-effect of changing the status to CONNECTED:
that's a telepathy-glib bug.
The backtrace contains GSimpleAsyncResult machinery, so I think what's happened
here is:
* bare_jid_disco_cb succeeds, we've disco'ed ourselves
* conn_presence_set_initial_presence_async succeeds, and schedules a call
to its callback in an idle; we are now ready to be CONNECTED, but because
of GAsyncResult calling conventions, we won't call the callback right now
* someone calls Disconnect(), and we do so, synchronously; we are now
DISCONNECTED
* the idle goes off and connection_initial_presence_cb is called
--
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the telepathy-bugs
mailing list