From 6ca5765eb63e1cb0374489607b255feeca8e2ba7 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 19 Mar 2010 10:54:10 -0700 Subject: core: add chaining helper functions to callback info Helpful when chaining a number of commands together when you want to schedule the callback info only after all of them complete. --- src/mm-callback-info.c | 23 +++++++++++++++++++++++ src/mm-callback-info.h | 6 ++++++ 2 files changed, 29 insertions(+) (limited to 'src') diff --git a/src/mm-callback-info.c b/src/mm-callback-info.c index 1882898a..1986bb55 100644 --- a/src/mm-callback-info.c +++ b/src/mm-callback-info.c @@ -91,6 +91,8 @@ mm_callback_info_schedule (MMCallbackInfo *info) g_return_if_fail (info->pending_id == 0); g_return_if_fail (info->called == FALSE); + g_warn_if_fail (info->chain_left == 0); + info->pending_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, callback_info_do, info, callback_info_done); } @@ -208,3 +210,24 @@ mm_callback_info_unref (MMCallbackInfo *info) } } +void +mm_callback_info_chain_start (MMCallbackInfo *info, guint num) +{ + g_return_if_fail (info != NULL); + g_return_if_fail (num > 0); + g_return_if_fail (info->chain_left == 0); + + info->chain_left = num; +} + +void +mm_callback_info_chain_complete_one (MMCallbackInfo *info) +{ + g_return_if_fail (info != NULL); + g_return_if_fail (info->chain_left > 0); + + info->chain_left--; + if (info->chain_left == 0) + mm_callback_info_schedule (info); +} + diff --git a/src/mm-callback-info.h b/src/mm-callback-info.h index 66c20487..ef4d65fc 100644 --- a/src/mm-callback-info.h +++ b/src/mm-callback-info.h @@ -25,6 +25,9 @@ typedef void (*MMCallbackInfoInvokeFn) (MMCallbackInfo *info); struct _MMCallbackInfo { guint32 refcount; + /* # of ops left in this callback chain */ + guint32 chain_left; + GData *qdata; MMModem *modem; @@ -70,5 +73,8 @@ gpointer mm_callback_info_get_data (MMCallbackInfo *info, MMCallbackInfo *mm_callback_info_ref (MMCallbackInfo *info); void mm_callback_info_unref (MMCallbackInfo *info); +void mm_callback_info_chain_start (MMCallbackInfo *info, guint num); +void mm_callback_info_chain_complete_one (MMCallbackInfo *info); + #endif /* MM_CALLBACK_INFO_H */ -- cgit v1.2.3-70-g09d2