[vlc-devel] [PATCH 5/5] sap: simplify not using cancellation

Steve Lhomme robux4 at ycbcr.xyz
Mon Feb 10 07:54:21 CET 2020


On 2020-02-09 14:33, RĂ©mi Denis-Courmont wrote:
> ---
>   src/stream_output/sap.c | 22 ++++++++--------------
>   1 file changed, 8 insertions(+), 14 deletions(-)
> 
> diff --git a/src/stream_output/sap.c b/src/stream_output/sap.c
> index eb85ab7297..481f3e5f20 100644
> --- a/src/stream_output/sap.c
> +++ b/src/stream_output/sap.c
> @@ -27,7 +27,6 @@
>   
>   #include <vlc_common.h>
>   
> -#include <stdnoreturn.h>
>   #include <stdlib.h>                                                /* free() */
>   #include <stdio.h>                                              /* sprintf() */
>   #include <string.h>
> @@ -81,7 +80,7 @@ static vlc_mutex_t sap_mutex = VLC_STATIC_MUTEX;
>   #define MIN_INTERVAL 2
>   #define MAX_INTERVAL 300
>   
> -noreturn static void *RunThread (void *);
> +static void *RunThread (void *);
>   
>   static sap_address_t *AddressCreate (vlc_object_t *obj, const char *group)
>   {
> @@ -120,14 +119,13 @@ static void AddressDestroy (sap_address_t *addr)
>    * \param p_this the SAP Handler object
>    * \return nothing
>    */
> -noreturn static void *RunThread (void *self)
> +static void *RunThread (void *self)
>   {
>       sap_address_t *addr = self;
>   
>       vlc_mutex_lock(&sap_mutex);
> -    mutex_cleanup_push(&sap_mutex);
>   
> -    for (;;)
> +    while (!vlc_list_is_empty(&addr->sessions))

So when the number of sessions goes down to zero, it exits. Before it 
would wait, in case a new session would come. Is this intended ?

>       {
>           session_descriptor_t *p_session;
>           vlc_tick_t deadline = vlc_tick_now();
> @@ -144,8 +142,8 @@ noreturn static void *RunThread (void *self)
>           }
>       }
>   
> -    vlc_cleanup_pop ();
> -    vlc_assert_unreachable ();
> +    vlc_mutex_unlock(&sap_mutex);
> +    return NULL;
>   }
>   
>   #undef sout_AnnounceRegisterSDP
> @@ -372,17 +370,13 @@ void sout_AnnounceUnRegister (vlc_object_t *obj, session_descriptor_t *session)
>       if (vlc_list_is_empty(&addr->sessions))
>           /* Last session for this address -> unlink the address */
>           vlc_list_remove(&addr->node);
> -    else
> -    {
> -        addr->session_count--;
> -        vlc_cond_signal (&addr->wait);
> -    }
>   
> -    vlc_mutex_unlock (&sap_mutex);
> +    addr->session_count--;
> +    vlc_cond_signal(&addr->wait);
> +    vlc_mutex_unlock(&sap_mutex);
>   
>       if (vlc_list_is_empty(&addr->sessions))
>       {
> -        vlc_cancel(addr->thread);
>           vlc_join(addr->thread, NULL);
>           AddressDestroy(addr);
>       }
> -- 
> 2.25.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> 


More information about the vlc-devel mailing list