Re: [PATCH] anydata: port get_detailed_registration_state to use GTask
On 20/10/17 08:26, Ben Chan wrote: > --- > plugins/anydata/mm-broadband-modem-anydata.c | 91 > +++- > 1 file changed, 35 insertions(+), 56 deletions(-) > Pushed to git master, thanks! > diff --git a/plugins/anydata/mm-broadband-modem-anydata.c > b/plugins/anydata/mm-broadband-modem-anydata.c > index 4b579da1..a4acaf27 100644 > --- a/plugins/anydata/mm-broadband-modem-anydata.c > +++ b/plugins/anydata/mm-broadband-modem-anydata.c > @@ -47,34 +47,6 @@ typedef struct { > MMModemCdmaRegistrationState detailed_evdo_state; > } DetailedRegistrationStateResults; > > -typedef struct { > -MMBroadbandModem *self; > -GSimpleAsyncResult *result; > -MMModemCdmaRegistrationState cdma1x_state; > -MMModemCdmaRegistrationState evdo_state; > -GError *error; > -} DetailedRegistrationStateContext; > - > -static void > -detailed_registration_state_context_complete_and_free > (DetailedRegistrationStateContext *ctx) > -{ > -if (ctx->error) > -g_simple_async_result_take_error (ctx->result, ctx->error); > -else { > -DetailedRegistrationStateResults *results; > - > -results = g_new (DetailedRegistrationStateResults, 1); > -results->detailed_cdma1x_state = ctx->cdma1x_state; > -results->detailed_evdo_state = ctx->evdo_state; > -g_simple_async_result_set_op_res_gpointer (ctx->result, results, > g_free); > -} > - > -g_simple_async_result_complete (ctx->result); > -g_object_unref (ctx->result); > -g_object_unref (ctx->self); > -g_free (ctx); > -} > - > static gboolean > get_detailed_registration_state_finish (MMIfaceModemCdma *self, > GAsyncResult *res, > @@ -84,31 +56,36 @@ get_detailed_registration_state_finish (MMIfaceModemCdma > *self, > { > DetailedRegistrationStateResults *results; > > -if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), > error)) > +results = g_task_propagate_pointer (G_TASK (res), error); > +if (!results) > return FALSE; > > -results = g_simple_async_result_get_op_res_gpointer > (G_SIMPLE_ASYNC_RESULT (res)); > *detailed_cdma1x_state = results->detailed_cdma1x_state; > *detailed_evdo_state = results->detailed_evdo_state; > +g_free (results); > return TRUE; > } > > static void > hstate_ready (MMIfaceModemCdma *self, >GAsyncResult *res, > - DetailedRegistrationStateContext *ctx) > + GTask *task) > { > +DetailedRegistrationStateResults *results; > GError *error = NULL; > const gchar *response; > GRegex *r; > GMatchInfo *match_info; > > +results = g_task_get_task_data (task); > + > response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, > ); > if (error) { > /* Leave superclass' reg state alone if AT*HSTATE isn't supported */ > g_error_free (error); > -/* Result is set here when completing */ > -detailed_registration_state_context_complete_and_free (ctx); > + > +g_task_return_pointer (task, g_memdup (results, sizeof (*results)), > g_free); > +g_object_unref (task); > return; > } > > @@ -135,11 +112,11 @@ hstate_ready (MMIfaceModemCdma *self, > * It may be that IDLE actually means NO SERVICE too; not > sure. > */ > if (dbm > -105) > -ctx->evdo_state = > MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; > +results->detailed_evdo_state = > MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; > break; > case 4: /* ACCESS */ > case 5: /* CONNECT */ > -ctx->evdo_state = > MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; > +results->detailed_evdo_state = > MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; > break; > default: > mm_warn ("ANYDATA: unknown *STATE (%d); assuming no > service.", val); > @@ -155,25 +132,29 @@ hstate_ready (MMIfaceModemCdma *self, > g_match_info_free (match_info); > g_regex_unref (r); > > -/* Result is set here when completing */ > -detailed_registration_state_context_complete_and_free (ctx); > +g_task_return_pointer (task, g_memdup (results, sizeof (*results)), > g_free); > +g_object_unref (task); > } > > static void > state_ready (MMIfaceModemCdma *self, > GAsyncResult *res, > - DetailedRegistrationStateContext *ctx) > + GTask *task) > { > +DetailedRegistrationStateResults *results; > +GError *error = NULL; > const gchar *response; > GRegex *r; > GMatchInfo *match_info; > > -response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, > >error); > -if (ctx->error) { > -detailed_registration_state_context_complete_and_free (ctx); > +response =
[PATCH] anydata: port get_detailed_registration_state to use GTask
--- plugins/anydata/mm-broadband-modem-anydata.c | 91 +++- 1 file changed, 35 insertions(+), 56 deletions(-) diff --git a/plugins/anydata/mm-broadband-modem-anydata.c b/plugins/anydata/mm-broadband-modem-anydata.c index 4b579da1..a4acaf27 100644 --- a/plugins/anydata/mm-broadband-modem-anydata.c +++ b/plugins/anydata/mm-broadband-modem-anydata.c @@ -47,34 +47,6 @@ typedef struct { MMModemCdmaRegistrationState detailed_evdo_state; } DetailedRegistrationStateResults; -typedef struct { -MMBroadbandModem *self; -GSimpleAsyncResult *result; -MMModemCdmaRegistrationState cdma1x_state; -MMModemCdmaRegistrationState evdo_state; -GError *error; -} DetailedRegistrationStateContext; - -static void -detailed_registration_state_context_complete_and_free (DetailedRegistrationStateContext *ctx) -{ -if (ctx->error) -g_simple_async_result_take_error (ctx->result, ctx->error); -else { -DetailedRegistrationStateResults *results; - -results = g_new (DetailedRegistrationStateResults, 1); -results->detailed_cdma1x_state = ctx->cdma1x_state; -results->detailed_evdo_state = ctx->evdo_state; -g_simple_async_result_set_op_res_gpointer (ctx->result, results, g_free); -} - -g_simple_async_result_complete (ctx->result); -g_object_unref (ctx->result); -g_object_unref (ctx->self); -g_free (ctx); -} - static gboolean get_detailed_registration_state_finish (MMIfaceModemCdma *self, GAsyncResult *res, @@ -84,31 +56,36 @@ get_detailed_registration_state_finish (MMIfaceModemCdma *self, { DetailedRegistrationStateResults *results; -if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) +results = g_task_propagate_pointer (G_TASK (res), error); +if (!results) return FALSE; -results = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); *detailed_cdma1x_state = results->detailed_cdma1x_state; *detailed_evdo_state = results->detailed_evdo_state; +g_free (results); return TRUE; } static void hstate_ready (MMIfaceModemCdma *self, GAsyncResult *res, - DetailedRegistrationStateContext *ctx) + GTask *task) { +DetailedRegistrationStateResults *results; GError *error = NULL; const gchar *response; GRegex *r; GMatchInfo *match_info; +results = g_task_get_task_data (task); + response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, ); if (error) { /* Leave superclass' reg state alone if AT*HSTATE isn't supported */ g_error_free (error); -/* Result is set here when completing */ -detailed_registration_state_context_complete_and_free (ctx); + +g_task_return_pointer (task, g_memdup (results, sizeof (*results)), g_free); +g_object_unref (task); return; } @@ -135,11 +112,11 @@ hstate_ready (MMIfaceModemCdma *self, * It may be that IDLE actually means NO SERVICE too; not sure. */ if (dbm > -105) -ctx->evdo_state = MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; +results->detailed_evdo_state = MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; break; case 4: /* ACCESS */ case 5: /* CONNECT */ -ctx->evdo_state = MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; +results->detailed_evdo_state = MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED; break; default: mm_warn ("ANYDATA: unknown *STATE (%d); assuming no service.", val); @@ -155,25 +132,29 @@ hstate_ready (MMIfaceModemCdma *self, g_match_info_free (match_info); g_regex_unref (r); -/* Result is set here when completing */ -detailed_registration_state_context_complete_and_free (ctx); +g_task_return_pointer (task, g_memdup (results, sizeof (*results)), g_free); +g_object_unref (task); } static void state_ready (MMIfaceModemCdma *self, GAsyncResult *res, - DetailedRegistrationStateContext *ctx) + GTask *task) { +DetailedRegistrationStateResults *results; +GError *error = NULL; const gchar *response; GRegex *r; GMatchInfo *match_info; -response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, >error); -if (ctx->error) { -detailed_registration_state_context_complete_and_free (ctx); +response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, ); +if (error) { +g_task_return_error (task, error); +g_object_unref (task); return; } +results = g_task_get_task_data (task); response = mm_strip_tag (response, "*STATE:"); /* Format is ",,..." */ @@ -197,12 +178,12 @@ state_ready