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.
This commit is contained in:
@@ -91,6 +91,8 @@ mm_callback_info_schedule (MMCallbackInfo *info)
|
|||||||
g_return_if_fail (info->pending_id == 0);
|
g_return_if_fail (info->pending_id == 0);
|
||||||
g_return_if_fail (info->called == FALSE);
|
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);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -25,6 +25,9 @@ typedef void (*MMCallbackInfoInvokeFn) (MMCallbackInfo *info);
|
|||||||
struct _MMCallbackInfo {
|
struct _MMCallbackInfo {
|
||||||
guint32 refcount;
|
guint32 refcount;
|
||||||
|
|
||||||
|
/* # of ops left in this callback chain */
|
||||||
|
guint32 chain_left;
|
||||||
|
|
||||||
GData *qdata;
|
GData *qdata;
|
||||||
MMModem *modem;
|
MMModem *modem;
|
||||||
|
|
||||||
@@ -70,5 +73,8 @@ gpointer mm_callback_info_get_data (MMCallbackInfo *info,
|
|||||||
MMCallbackInfo *mm_callback_info_ref (MMCallbackInfo *info);
|
MMCallbackInfo *mm_callback_info_ref (MMCallbackInfo *info);
|
||||||
void mm_callback_info_unref (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 */
|
#endif /* MM_CALLBACK_INFO_H */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user