[vlc-commits] [Git][videolan/vlc][master] 2 commits: preparser: hold the request before submitting it

Steve Lhomme (@robUx4) gitlab at videolan.org
Fri Jul 17 09:00:25 UTC 2026



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
ee4c2d8e by Michal Porubcin at 2026-07-17T08:29:43+00:00
preparser: hold the request before submitting it

- - - - -
14b145e1 by Michal Porubcin at 2026-07-17T08:29:43+00:00
lib: parser: retain the task before pushing the request

- - - - -


2 changed files:

- lib/parser.c
- src/preparser/internal.c


Changes:

=====================================
lib/parser.c
=====================================
@@ -317,6 +317,8 @@ libvlc_parser_queue(libvlc_parser_t *parser,
     if (task == NULL)
         return NULL;
 
+    libvlc_parser_task_retain(task);
+
     task->preparser_req = vlc_preparser_Push(parser->preparser,
                                              item,
                                              type_options,
@@ -329,7 +331,7 @@ libvlc_parser_queue(libvlc_parser_t *parser,
         return NULL;
     }
 
-    return libvlc_parser_task_retain(task);
+    return task;
 }
 
 libvlc_parser_task *
@@ -380,6 +382,8 @@ libvlc_parser_queue_thumbnailing(libvlc_parser_t *parser,
     thumb_arg.seek.speed = req->seek.speed == libvlc_media_thumbnail_seek_fast
                          ? VLC_THUMBNAILER_SEEK_FAST : VLC_THUMBNAILER_SEEK_PRECISE;
 
+    libvlc_parser_task_retain(task);
+
     task->preparser_req = vlc_preparser_GenerateThumbnail(parser->preparser, item, &thumb_arg,
                                                           &thumbnailer_callbacks, task);
 
@@ -389,7 +393,7 @@ libvlc_parser_queue_thumbnailing(libvlc_parser_t *parser,
         return NULL;
     }
 
-    return libvlc_parser_task_retain(task);
+    return task;
 }
 
 size_t libvlc_parser_cancel_request(libvlc_parser_t *parser,


=====================================
src/preparser/internal.c
=====================================
@@ -657,17 +657,26 @@ preparser_Push( void *opaque, input_item_t *item,
 
     struct vlc_preparser_req_owner *req_owner = preparser_req_get_owner(req);
 
+    PreparserRequestRetain(req);
+
     if (preparser->parser != NULL)
     {
         PreparserAddTask(preparser, req);
 
         vlc_executor_Submit(preparser->parser, &req_owner->runnable);
 
-        return PreparserRequestRetain(req);
+        return req;
     }
 
     int ret = Fetch(req);
-    return ret == VLC_SUCCESS ? PreparserRequestRetain(req) : NULL;
+    if (ret != VLC_SUCCESS)
+    {
+        /* Never submitted: drop the caller and the task references */
+        vlc_preparser_req_Release(req);
+        vlc_preparser_req_Release(req);
+        return NULL;
+    }
+    return req;
 }
 
 static vlc_preparser_req *
@@ -696,9 +705,10 @@ preparser_GenerateThumbnail( void *opaque, input_item_t *item,
 
     struct vlc_preparser_req_owner *req_owner = preparser_req_get_owner(req);
 
+    PreparserRequestRetain(req);
     vlc_executor_Submit(preparser->thumbnailer, &req_owner->runnable);
 
-    return PreparserRequestRetain(req);
+    return req;
 }
 
 static int
@@ -843,9 +853,10 @@ preparser_GenerateThumbnailToFiles( void *opaque, input_item_t *item,
 
     PreparserAddTask(preparser, req);
 
+    PreparserRequestRetain(req);
     vlc_executor_Submit(preparser->thumbnailer, &req_owner->runnable);
 
-    return PreparserRequestRetain(req);
+    return req;
 }
 
 static size_t preparser_Cancel( void *opaque, vlc_preparser_req *req )



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6d6a801b7d1861d57522625fc491c5cc7511751a...14b145e17b23f3620d4f8c508fdb422ff399ba28

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6d6a801b7d1861d57522625fc491c5cc7511751a...14b145e17b23f3620d4f8c508fdb422ff399ba28
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help




More information about the vlc-commits mailing list