Bug 27154 - terminating action chain in pendingproc_connect_signals() leads to crash
Summary: terminating action chain in pendingproc_connect_signals() leads to crash
Status: RESOLVED FIXED
Alias: None
Product: Telepathy
Classification: Unclassified
Component: logger (show other bugs)
Version: git master
Hardware: Other All
: medium normal
Assignee: Telepathy bugs list
QA Contact: Telepathy bugs list
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-03-17 20:40 UTC by Danielle Madeley
Modified: 2010-03-18 22:11 UTC (History)
1 user (show)

See Also:
i915 platform:
i915 features:


Attachments

Description Danielle Madeley 2010-03-17 20:40:23 UTC
In channel-text.c:pendingproc_connect_signals(), if the action chain is terminated due to an error, then the logger will crash when receiving a message from that signal.

This seems to be because other items, such as the TpContacts for the endpoints of the channel are never prepared, but the channel is still exists to receive messages.

If an actionchain is terminated, then there should be some callback that allows the logger to cleanup and drop the channel as unloggable.

~

This bug is specifically being triggered by channels coming from Salut, which doesn't support the Messages interface, and thus PendingMessagesRemoved cannot be connected. So separately, we still require a workable failsafe for when Messages is not available.
Comment 1 Danielle Madeley 2010-03-17 23:29:36 UTC
Ok. This patch cleans a few things up, it makes channel registering a bit less messy, and fixes a leak in TplActionChain that means it's now possible to finalize a channel. When the dead channel is finalized it stops receiving signals and later crashing the logger.

http://git.collabora.co.uk/?p=user/danni/telepathy-logger.git;a=commitdiff;h=9cd9a58d7331a96e20f262402628b81dfc675c68

Freeing the action chain is now moved from tpl_actionchain_continue/terminate to tpl_actionchain_finish, otherwise you can't get the result.

The bug was that tpl_actionchain_free() didn't free the GSimpleAsyncResult, so it leaked, along with its ref to the source object. That has now been fixed, so we can't free it before we get the result.

Also includes the contents of tpl-conf-iface commit 7971e1a0d6101cd125381ca1860f7c79ef8f74d0 which I independently came across and then realised was the same thing.

~

Need to still fix the bug where channels not implementing Messages never get logged.
Comment 2 Danielle Madeley 2010-03-18 22:11:12 UTC
Found another leak. TplLogEntryText objects were being leaked, which summarily leaked TplChannelText's that had received a message.

Fixed this and merged it to master along with the rest of log-store-sqlite-avoid-dups.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.