summaryrefslogtreecommitdiff
path: root/logger
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2011-06-27 12:53:31 -0400
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2011-06-27 13:28:49 -0400
commitb911aea0d9f4f8195a5f7b869086b39d06967bba (patch)
treefc199087fcf83ff78cc040bda410b64c2f035001 /logger
parent15b89eb925ee45303d7c029255eda8595dc0fcc3 (diff)
Fix action chain not to free result in finish
Freeing result in finish would lead to use after free since GLib push and pop default thread context in complete() calls. Also, it's very bad pratice as _finish() calls are optional.
Diffstat (limited to 'logger')
-rw-r--r--logger/telepathy-logger/action-chain.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/logger/telepathy-logger/action-chain.c b/logger/telepathy-logger/action-chain.c
index df792e548..14b9452d0 100644
--- a/logger/telepathy-logger/action-chain.c
+++ b/logger/telepathy-logger/action-chain.c
@@ -109,7 +109,10 @@ void
_tpl_action_chain_continue (TplActionChain *self)
{
if (g_queue_is_empty (self->chain))
- g_simple_async_result_complete (self->simple);
+ {
+ g_simple_async_result_complete (self->simple);
+ _tpl_action_chain_free (self);
+ }
else
{
TplActionLink *l = g_queue_pop_head (self->chain);
@@ -130,6 +133,7 @@ _tpl_action_chain_terminate (TplActionChain *self,
g_simple_async_result_set_from_error (simple, error);
g_simple_async_result_complete (simple);
+ _tpl_action_chain_free (self);
}
@@ -164,6 +168,5 @@ _tpl_action_chain_new_finish (GObject *source,
error))
return FALSE;
- _tpl_action_chain_free (chain);
return TRUE;
}