diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2011-06-27 12:53:31 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2011-06-27 13:28:49 -0400 |
commit | b911aea0d9f4f8195a5f7b869086b39d06967bba (patch) | |
tree | fc199087fcf83ff78cc040bda410b64c2f035001 /logger | |
parent | 15b89eb925ee45303d7c029255eda8595dc0fcc3 (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.c | 7 |
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; } |