diff options
author | Dan Williams <dcbw@redhat.com> | 2009-12-07 22:04:28 -0800 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-12-07 22:04:28 -0800 |
commit | dd057d28e4ab3812eebd41a7df1c2f80d90d8600 (patch) | |
tree | 46fa937720de3305ccc093f4741f0a25680fcba0 /src/mm-callback-info.c | |
parent | f715e0d498930409d97a8097b37731aadbc11a72 (diff) | |
parent | a9e0624426632a38c2d208e7a28fac3bca51d857 (diff) |
Merge commit 'origin/states'
Diffstat (limited to 'src/mm-callback-info.c')
-rw-r--r-- | src/mm-callback-info.c | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/src/mm-callback-info.c b/src/mm-callback-info.c index 089f0b73..b554f79b 100644 --- a/src/mm-callback-info.c +++ b/src/mm-callback-info.c @@ -72,14 +72,7 @@ callback_info_done (gpointer user_data) if (info->invoke_fn && info->callback) info->invoke_fn (info); - if (info->error) - g_error_free (info->error); - - if (info->modem) - g_object_weak_unref (G_OBJECT (info->modem), modem_destroyed_cb, info); - - g_datalist_clear (&info->qdata); - g_slice_free (MMCallbackInfo, info); + mm_callback_info_unref (info); } static gboolean @@ -117,6 +110,7 @@ mm_callback_info_new_full (MMModem *modem, info->invoke_fn = invoke_fn; info->callback = callback; info->user_data = user_data; + info->refcount = 1; return info; } @@ -184,3 +178,32 @@ mm_callback_info_get_data (MMCallbackInfo *info, const char *key) return quark ? g_datalist_id_get_data (&info->qdata, quark) : NULL; } + +MMCallbackInfo * +mm_callback_info_ref (MMCallbackInfo *info) +{ + g_return_val_if_fail (info != NULL, NULL); + g_return_val_if_fail (info->refcount > 0, NULL); + + info->refcount++; + return info; +} + +void +mm_callback_info_unref (MMCallbackInfo *info) +{ + g_return_if_fail (info != NULL); + + info->refcount--; + if (info->refcount == 0) { + if (info->error) + g_error_free (info->error); + + if (info->modem) + g_object_weak_unref (G_OBJECT (info->modem), modem_destroyed_cb, info); + + g_datalist_clear (&info->qdata); + g_slice_free (MMCallbackInfo, info); + } +} + |