[vlc-devel] [PATCH 1/3] lib: media: Mandate an explicit destroy of thumbnail requests

Hugo Beauzée-Luyssen hugo at beauzee.fr
Thu Oct 24 11:32:52 CEST 2019


---
 include/vlc/libvlc_media.h | 16 ++++++++++++++--
 lib/libvlc.sym             |  1 +
 lib/media.c                |  6 ++++--
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/include/vlc/libvlc_media.h b/include/vlc/libvlc_media.h
index 6861181270..e64ecdb84c 100644
--- a/include/vlc/libvlc_media.h
+++ b/include/vlc/libvlc_media.h
@@ -830,7 +830,8 @@ typedef enum libvlc_thumbnailer_seek_speed_t
  * \param timeout A timeout value in ms, or 0 to disable timeout
  *
  * \return A valid opaque request object, or NULL in case of failure.
- * It must be released by libvlc_media_thumbnail_cancel().
+ * It may be cancelled by libvlc_media_thumbnail_cancel().
+ * It must be released by libvlc_media_thumbnail_destroy().
  *
  * \version libvlc 4.0 or later
  *
@@ -860,7 +861,8 @@ libvlc_media_thumbnail_request_by_time( libvlc_media_t *md,
  * \param timeout A timeout value in ms, or 0 to disable timeout
  *
  * \return A valid opaque request object, or NULL in case of failure.
- * It must be released by libvlc_media_thumbnail_cancel().
+ * It may be cancelled by libvlc_media_thumbnail_cancel().
+ * It must be released by libvlc_media_thumbnail_destroy().
  *
  * \version libvlc 4.0 or later
  *
@@ -886,6 +888,16 @@ libvlc_media_thumbnail_request_by_pos( libvlc_media_t *md,
 LIBVLC_API void
 libvlc_media_thumbnail_cancel( libvlc_media_thumbnail_request_t *p_req );
 
+/**
+ * @brief libvlc_media_thumbnail_destroy destroys a thumbnail request
+ * @param p_req An opaque thumbnail request object.
+ *
+ * If the request has not completed or hasn't been cancelled yet, the behavior
+ * is undefined
+ */
+LIBVLC_API void
+libvlc_media_thumbnail_destroy( libvlc_media_thumbnail_request_t *p_req );
+
 /**
  * Add a slave to the current media.
  *
diff --git a/lib/libvlc.sym b/lib/libvlc.sym
index d1ee941cac..3a4870120d 100644
--- a/lib/libvlc.sym
+++ b/lib/libvlc.sym
@@ -84,6 +84,7 @@ libvlc_media_get_parsed_status
 libvlc_media_thumbnail_request_by_time
 libvlc_media_thumbnail_request_by_pos
 libvlc_media_thumbnail_cancel
+libvlc_media_thumbnail_destroy
 libvlc_media_list_add_media
 libvlc_media_list_count
 libvlc_media_list_event_manager
diff --git a/lib/media.c b/lib/media.c
index 8860a9e1aa..27df35b454 100644
--- a/lib/media.c
+++ b/lib/media.c
@@ -1106,8 +1106,6 @@ static void media_on_thumbnail_ready( void* data, picture_t* thumbnail )
     libvlc_event_send( &p_media->event_manager, &event );
     if ( pic != NULL )
         libvlc_picture_release( pic );
-    libvlc_media_release( p_media );
-    free( req );
 }
 
 libvlc_media_thumbnail_request_t*
@@ -1188,6 +1186,10 @@ void libvlc_media_thumbnail_cancel( libvlc_media_thumbnail_request_t *req )
     libvlc_priv_t *p_priv = libvlc_priv(req->md->p_libvlc_instance->p_libvlc_int);
     assert( p_priv->p_thumbnailer != NULL );
     vlc_thumbnailer_Cancel( p_priv->p_thumbnailer, req->req );
+}
+
+void libvlc_media_thumbnail_destroy( libvlc_media_thumbnail_request_t *req )
+{
     libvlc_media_release( req->md );
     free( req );
 }
-- 
2.20.1



More information about the vlc-devel mailing list