[vlc-devel] [PATCH 2/4] libvlc: media_player: use vlc_atomic_rc for refcount
Alexandre Janniaux
ajanni at videolabs.io
Sat Nov 21 13:20:59 CET 2020
---
lib/media_player.c | 17 +++++------------
lib/media_player_internal.h | 3 +--
2 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/lib/media_player.c b/lib/media_player.c
index b639169835..58dfbc39fb 100644
--- a/lib/media_player.c
+++ b/lib/media_player.c
@@ -729,7 +729,7 @@ libvlc_media_player_new( libvlc_instance_t *instance )
vlc_player_Unlock(mp->player);
- mp->i_refcount = 1;
+ vlc_atomic_rc_init(&mp->rc);
libvlc_event_manager_init(&mp->event_manager, mp);
/* Snapshot initialization */
@@ -824,15 +824,11 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi )
**************************************************************************/
void libvlc_media_player_release( libvlc_media_player_t *p_mi )
{
- bool destroy;
-
assert( p_mi );
- vlc_player_Lock(p_mi->player);
- destroy = !--p_mi->i_refcount;
- vlc_player_Unlock(p_mi->player);
+ if( !vlc_atomic_rc_dec( &p_mi->rc ) )
+ return;
- if( destroy )
- libvlc_media_player_destroy( p_mi );
+ libvlc_media_player_destroy( p_mi );
}
/**************************************************************************
@@ -843,10 +839,7 @@ void libvlc_media_player_release( libvlc_media_player_t *p_mi )
void libvlc_media_player_retain( libvlc_media_player_t *p_mi )
{
assert( p_mi );
-
- vlc_player_Lock(p_mi->player);
- p_mi->i_refcount++;
- vlc_player_Unlock(p_mi->player);
+ vlc_atomic_rc_inc( &p_mi->rc );
}
/**************************************************************************
diff --git a/lib/media_player_internal.h b/lib/media_player_internal.h
index 1b95fcb355..4a0010e29d 100644
--- a/lib/media_player_internal.h
+++ b/lib/media_player_internal.h
@@ -40,8 +40,7 @@
struct libvlc_media_player_t
{
struct vlc_object_t obj;
-
- int i_refcount;
+ vlc_atomic_rc_t rc;
vlc_player_t *player;
vlc_player_listener_id *listener;
--
2.29.2
More information about the vlc-devel
mailing list