[vlc-devel] [PATCH 2/2] audioscrobbler: use semaphore instead of cancellation

Alexandre Janniaux ajanni at videolabs.io
Mon Apr 13 12:29:10 CEST 2020


Hi,

It seems to add more complexity than removing it(unlike
other similar patch you wrote) so adding more info in the
commit message would help understand why you make this change
on the long run.

I haven't reviewed in details though yet.

Regards,
--
Alexandre Janniaux
Videolabs

On Sun, Apr 12, 2020 at 12:14:41PM +0300, RĂ©mi Denis-Courmont wrote:
> ---
>  modules/misc/audioscrobbler.c | 26 +++++++++++++++++---------
>  1 file changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/modules/misc/audioscrobbler.c b/modules/misc/audioscrobbler.c
> index 312c271fd0..741a5524c3 100644
> --- a/modules/misc/audioscrobbler.c
> +++ b/modules/misc/audioscrobbler.c
> @@ -82,6 +82,7 @@ struct intf_sys_t
>
>      vlc_mutex_t             lock;               /**< p_sys mutex            */
>      vlc_cond_t              wait;               /**< song to submit event   */
> +    vlc_sem_t               dead;
>      vlc_thread_t            thread;             /**< thread to submit song  */
>
>      /* submission of played songs */
> @@ -406,6 +407,7 @@ static int Open(vlc_object_t *p_this)
>
>      vlc_mutex_init(&p_sys->lock);
>      vlc_cond_init(&p_sys->wait);
> +    vlc_sem_init(&p_sys->dead, 0);
>
>      if (vlc_clone(&p_sys->thread, Run, p_intf, VLC_THREAD_PRIORITY_LOW))
>      {
> @@ -438,7 +440,10 @@ static void Close(vlc_object_t *p_this)
>      intf_sys_t *p_sys = p_intf->p_sys;
>      vlc_playlist_t *playlist = p_sys->playlist;
>
> -    vlc_cancel(p_sys->thread);
> +    vlc_mutex_lock(&p_sys->lock);
> +    vlc_sem_post(&p_sys->dead);
> +    vlc_cond_signal(&p_sys->wait);
> +    vlc_mutex_unlock(&p_sys->lock);
>      vlc_join(p_sys->thread, NULL);
>
>      int i;
> @@ -681,7 +686,6 @@ static void *Run(void *data)
>  {
>      intf_thread_t          *p_intf = data;
>      uint8_t                 p_buffer[1024];
> -    int                     canc = vlc_savecancel();
>      bool                    b_handshaked = false;
>      bool                    b_nowp_submission_ongoing = false;
>
> @@ -694,19 +698,24 @@ static void *Run(void *data)
>      /* main loop */
>      for (;;)
>      {
> -        vlc_restorecancel(canc);
> -        if (next_exchange != VLC_TICK_INVALID)
> -            vlc_tick_wait(next_exchange);
> +        if (next_exchange != VLC_TICK_INVALID
> +         && vlc_sem_timedwait(&p_sys->dead, next_exchange) == 0)
> +            break;
>
>          vlc_mutex_lock(&p_sys->lock);
> -        mutex_cleanup_push(&p_sys->lock);
>
>          while (p_sys->i_songs == 0 && p_sys->b_submit_nowp == false)
> +        {
> +            if (vlc_sem_trywait(&p_sys->dead) == 0)
> +            {
> +                vlc_mutex_unlock(&p_sys->lock);
> +                break;
> +            }
> +
>              vlc_cond_wait(&p_sys->wait, &p_sys->lock);
> +        }
>
> -        vlc_cleanup_pop();
>          vlc_mutex_unlock(&p_sys->lock);
> -        canc = vlc_savecancel();
>
>          /* handshake if needed */
>          if (!b_handshaked)
> @@ -911,6 +920,5 @@ static void *Run(void *data)
>          }
>      }
>  out:
> -    vlc_restorecancel(canc);
>      return NULL;
>  }
> --
> 2.26.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