[rhythmbox] podcast: handle return values from totem-pl-parser when cancelled



commit 97df9fba504a4b1025c924d8a2b3f063dfbd5f5a
Author: Jonathan Matthew <jonathan d14n org>
Date:   Tue Jun 21 21:44:23 2022 +1000

    podcast: handle return values from totem-pl-parser when cancelled
    
    For some time, totem_pl_parser_parse_finish() has returned -1 when async
    parsing is cancelled, and now (as of GNOME/totem-pl-parser!49) it
    returns TOTEM_PL_PARSER_RESULT_CANCELLED.  Both of these possibilities
    need to be handled rather than causing an assertion failure, since we
    cancel all outstanding feed parsing when shutting down.  The code
    calling this expects a G_IO_ERROR_CANCELLED error to indicate the parser
    was cancelled, so ensure that's what we provide regardless of what the
    parser gave us.
    
    Fixes: #1988

 podcast/rb-podcast-parse.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
---
diff --git a/podcast/rb-podcast-parse.c b/podcast/rb-podcast-parse.c
index 42a8300fa..5819658a2 100644
--- a/podcast/rb-podcast-parse.c
+++ b/podcast/rb-podcast-parse.c
@@ -170,9 +170,21 @@ parse_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
        RBPodcastParseData *data = user_data;
        RBPodcastChannel *channel = data->channel;
        GError *error = NULL;
+       int result;
 
        channel->status = RB_PODCAST_PARSE_STATUS_ERROR;
-       switch (totem_pl_parser_parse_finish (TOTEM_PL_PARSER (source_object), res, &error)) {
+       result = totem_pl_parser_parse_finish (TOTEM_PL_PARSER (source_object), res, &error);
+
+       switch (result) {
+       case -1:                /* some versions of totem-pl-parser return this when cancelled */
+       case TOTEM_PL_PARSER_RESULT_CANCELLED:
+               rb_debug ("parsing of %s cancelled", channel->url);
+
+               /* ensure we have a G_IO_ERROR_CANCELLED error */
+               g_clear_error (&error);
+               g_set_error (&error, G_IO_ERROR, G_IO_ERROR_CANCELLED, " ");
+               break;
+
        case TOTEM_PL_PARSER_RESULT_ERROR:
        case TOTEM_PL_PARSER_RESULT_IGNORED:
        case TOTEM_PL_PARSER_RESULT_UNHANDLED:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]