[Spice-devel] [PATCH v2 07/13] spice-gstaudio: Use GTask instead of GSimpleAsyncResult

Jonathon Jongsma jjongsma at redhat.com
Tue Feb 16 21:26:34 UTC 2016


On Fri, 2016-02-12 at 10:46 +0100, Fabiano FidĂȘncio wrote:
> Instead of using GSimpleAsyncResult, use the new GTask API, which is
> much more straightforward.
> ---
>  src/spice-gstaudio.c | 44 ++++++++++++++------------------------------
>  1 file changed, 14 insertions(+), 30 deletions(-)
> 
> diff --git a/src/spice-gstaudio.c b/src/spice-gstaudio.c
> index 2759c2b..a7c3c24 100644
> --- a/src/spice-gstaudio.c
> +++ b/src/spice-gstaudio.c
> @@ -570,16 +570,9 @@ static void
> spice_gstaudio_get_playback_volume_info_async(SpiceAudio *audio,
>                                                            GAsyncReadyCallback
> callback,
>                                                            gpointer user_data)
>  {
> -    GSimpleAsyncResult *simple;
> +    GTask *task = g_task_new(audio, cancellable, callback, user_data);
>  
> -    simple = g_simple_async_result_new(G_OBJECT(audio),
> -                                       callback,
> -                                       user_data,
> -                                      
>  spice_gstaudio_get_playback_volume_info_async);
> -    g_simple_async_result_set_check_cancellable (simple, cancellable);
> -
> -    g_simple_async_result_set_op_res_gboolean(simple, TRUE);
> -    g_simple_async_result_complete_in_idle(simple);
> +    g_task_return_boolean(task, TRUE);
>  }
>  
>  static gboolean spice_gstaudio_get_playback_volume_info_finish(SpiceAudio
> *audio,
> @@ -594,17 +587,16 @@ static gboolean
> spice_gstaudio_get_playback_volume_info_finish(SpiceAudio *audio
>      gboolean lmute;
>      gdouble vol;
>      gboolean fake_channel = FALSE;
> -    GSimpleAsyncResult *simple = (GSimpleAsyncResult *) res;
> +    GTask *task = G_TASK(res);
>  
> -    g_return_val_if_fail(g_simple_async_result_is_valid(res,
> -        G_OBJECT(audio), spice_gstaudio_get_playback_volume_info_async),
> FALSE);
> +    g_return_val_if_fail(g_task_is_valid(task, audio), FALSE);
>  
> -    if (g_simple_async_result_propagate_error(simple, error)) {
> +    if (g_task_had_error(task)) {
>          /* set out args that should have new alloc'ed memory to NULL */
>          if (volume != NULL) {
>              *volume = NULL;
>          }
> -        return FALSE;
> +        return g_task_propagate_boolean(task, error);
>      }
>  
>      if (p->playback.sink == NULL || p->playback.channels == 0) {
> @@ -651,7 +643,7 @@ static gboolean
> spice_gstaudio_get_playback_volume_info_finish(SpiceAudio *audio
>          }
>      }
>  
> -    return g_simple_async_result_get_op_res_gboolean(simple);
> +    return g_task_propagate_boolean(task, error);
>  }
>  
>  static void spice_gstaudio_get_record_volume_info_async(SpiceAudio *audio,
> @@ -660,16 +652,9 @@ static void
> spice_gstaudio_get_record_volume_info_async(SpiceAudio *audio,
>                                                          GAsyncReadyCallback
> callback,
>                                                          gpointer user_data)
>  {
> -    GSimpleAsyncResult *simple;
> -
> -    simple = g_simple_async_result_new(G_OBJECT(audio),
> -                                       callback,
> -                                       user_data,
> -                                      
>  spice_gstaudio_get_record_volume_info_async);
> -    g_simple_async_result_set_check_cancellable (simple, cancellable);
> +    GTask *task = g_task_new(audio, cancellable, callback, user_data);
>  
> -    g_simple_async_result_set_op_res_gboolean(simple, TRUE);
> -    g_simple_async_result_complete_in_idle(simple);
> +    g_task_return_boolean(task, TRUE);
>  }
>  
>  static gboolean spice_gstaudio_get_record_volume_info_finish(SpiceAudio
> *audio,
> @@ -684,17 +669,16 @@ static gboolean
> spice_gstaudio_get_record_volume_info_finish(SpiceAudio *audio,
>      gboolean lmute;
>      gdouble vol;
>      gboolean fake_channel = FALSE;
> -    GSimpleAsyncResult *simple = (GSimpleAsyncResult *) res;
> +    GTask *task = G_TASK(res);
>  
> -    g_return_val_if_fail(g_simple_async_result_is_valid(res,
> -        G_OBJECT(audio), spice_gstaudio_get_record_volume_info_async),
> FALSE);
> +    g_return_val_if_fail(g_task_is_valid(task, audio), FALSE);
>  
> -    if (g_simple_async_result_propagate_error(simple, error)) {
> +    if (g_task_had_error(task)) {
>          /* set out args that should have new alloc'ed memory to NULL */
>          if (volume != NULL) {
>              *volume = NULL;
>          }
> -        return FALSE;
> +        return g_task_propagate_boolean(task, error);
>      }
>  
>      if (p->record.src == NULL || p->record.channels == 0) {
> @@ -741,5 +725,5 @@ static gboolean
> spice_gstaudio_get_record_volume_info_finish(SpiceAudio *audio,
>          }
>      }
>  
> -    return g_simple_async_result_get_op_res_gboolean(simple);
> +    return g_task_propagate_boolean(task, error);
>  }


There's a lot of duplication here between playback_volume_info_finish() and
record_volume_info_finish(). We should consider refactoring those in a future
commit to share more code.

Acked-by: Jonathon Jongsma <jjongsma at redhat.com>



More information about the Spice-devel mailing list