[vlc-devel] [PATCH 16/48] hls: use bool quit

Jean-Paul Saman jpsaman at videolan.org
Tue Jan 10 13:33:42 CET 2012


Patch looks OK.

Kind regards,

Jean-Paul Saman

On Mon, Jan 9, 2012 at 4:16 PM, Hugo Beauzée-Luyssen <beauze.h at gmail.com> wrote:
> From: Luc Saillard <luc.saillard at sfr.com>
>
> ---
>  modules/stream_filter/httplive.c |   25 ++++++++++++++++++-------
>  1 files changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
> index 6569bd2..ecac6fe 100644
> --- a/modules/stream_filter/httplive.c
> +++ b/modules/stream_filter/httplive.c
> @@ -144,6 +144,7 @@ struct stream_sys_t
>     bool        b_live;     /* live stream? or vod? */
>     bool        b_error;    /* parsing error */
>     bool        b_aesmsg;   /* only print one time that the media is encrypted */
> +    bool        b_quit;
>  };
>
>  /****************************************************************************
> @@ -1565,7 +1566,7 @@ static void* hls_Thread(void *p_this)
>
>     int canc = vlc_savecancel();
>
> -    while (vlc_object_alive(s))
> +    while (vlc_object_alive(s) && p_sys->b_quit == false)
>     {
>         hls_stream_t *hls = hls_Get(p_sys->hls_stream, p_sys->download.stream);
>         assert(hls);
> @@ -1588,6 +1589,7 @@ static void* hls_Thread(void *p_this)
>                 vlc_cond_wait(&p_sys->download.wait, &p_sys->download.lock_wait);
>                 if (!vlc_object_alive(s)) break;
>                 if (p_sys->b_live) break;
> +                if (p_sys->b_quit) break;
>             }
>             /* */
>             if (p_sys->download.seek >= 0)
> @@ -1599,6 +1601,7 @@ static void* hls_Thread(void *p_this)
>         }
>
>         if (!vlc_object_alive(s)) break;
> +        if (p_sys->b_quit) break;
>
>         vlc_mutex_lock(&hls->lock);
>         segment_t *segment = segment_GetSegment(hls, p_sys->download.segment);
> @@ -1616,6 +1619,7 @@ static void* hls_Thread(void *p_this)
>             (hls_DownloadSegmentData(s, hls, segment, &p_sys->download.stream) != VLC_SUCCESS))
>         {
>             if (!vlc_object_alive(s)) break;
> +            if (p_sys->b_quit) break;
>
>             if (!p_sys->b_live)
>             {
> @@ -1637,6 +1641,7 @@ static void* hls_Thread(void *p_this)
>         vlc_mutex_unlock(&p_sys->download.lock_wait);
>     }
>
> +    msg_Err(s, "Leaving thread hls_Thread() (is_alive=%d, b_quit=%d)", vlc_object_alive(s), p_sys->b_quit);
>     vlc_restorecancel(canc);
>     return NULL;
>  }
> @@ -1651,7 +1656,7 @@ static void* hls_Reload(void *p_this)
>     int canc = vlc_savecancel();
>
>     double wait = 0.5;
> -    while (vlc_object_alive(s))
> +    while (vlc_object_alive(s) && p_sys->b_quit == false)
>     {
>         mtime_t now = mdate();
>         if (now >= p_sys->playlist.wakeup)
> @@ -1691,6 +1696,7 @@ static void* hls_Reload(void *p_this)
>         mwait(now + 1000000);
>     }
>
> +    msg_Err(s, "Leaving thread hls_Reload() (is_alive=%d, b_quit=%d)", vlc_object_alive(s), p_sys->b_quit);
>     vlc_restorecancel(canc);
>     return NULL;
>  }
> @@ -1804,7 +1810,7 @@ static int hls_Download(stream_t *s, segment_t *segment)
>         if (length <= 0)
>             break;
>         curlen += length;
> -    } while (vlc_object_alive(s));
> +    } while (vlc_object_alive(s) && s->p_sys->b_quit == false);
>
>     stream_Delete(p_ts);
>     return VLC_SUCCESS;
> @@ -1929,6 +1935,8 @@ static int Open(vlc_object_t *p_this)
>     p_sys->b_live = true;
>     p_sys->b_meta = false;
>     p_sys->b_error = false;
> +    p_sys->b_aesmsg = false;
> +    p_sys->b_quit = false;
>
>     p_sys->hls_stream = vlc_array_new();
>     if (p_sys->hls_stream == NULL)
> @@ -2041,12 +2049,15 @@ static void Close(vlc_object_t *p_this)
>
>     assert(p_sys->hls_stream);
>
> +    p_sys->b_quit = true;
> +
>     /* */
>     vlc_mutex_lock(&p_sys->download.lock_wait);
>     vlc_cond_signal(&p_sys->download.wait);
>     vlc_mutex_unlock(&p_sys->download.lock_wait);
>
>     /* */
> +    msg_Err(s, "Waiting for thread reload playlist to finished (is_alive=%d)", vlc_object_alive(s));
>     if (p_sys->b_live)
>         vlc_join(p_sys->reload, NULL);
>     vlc_join(p_sys->thread, NULL);
> @@ -2097,7 +2108,7 @@ static segment_t *GetSegment(stream_t *s)
>     /* Was the HLS stream changed to another bitrate? */
>     int i_stream = 0;
>     segment = NULL;
> -    while(vlc_object_alive(s))
> +    while(vlc_object_alive(s) && p_sys->b_quit == false)
>     {
>         /* Is the next segment ready */
>         hls_stream_t *hls = hls_Get(p_sys->hls_stream, i_stream);
> @@ -2217,7 +2228,7 @@ static ssize_t hls_Read(stream_t *s, uint8_t *p_read, unsigned int i_read)
>         }
>         vlc_mutex_unlock(&segment->lock);
>
> -    } while ((i_read > 0) && vlc_object_alive(s));
> +    } while ((i_read > 0) && vlc_object_alive(s) && p_sys->b_quit == false);
>
>     return copied;
>  }
> @@ -2283,7 +2294,7 @@ again:
>         if( vlc_cond_timedwait( &p_sys->download.wait, &p_sys->download.lock_wait, timeout ) )
>             msg_Warn(s, "Peek() reached timeout");
>         vlc_mutex_unlock(&p_sys->download.lock_wait);
> -        if (!vlc_object_alive(s) || s->b_error)
> +        if (!vlc_object_alive(s) || s->b_error || p_sys->b_quit)
>             return 0; /* eof? */
>         goto again;
>     }
> @@ -2493,7 +2504,7 @@ static int segment_Seek(stream_t *s, const uint64_t pos)
>                 (p_sys->download.segment < (count - 6)))
>         {
>             vlc_cond_wait(&p_sys->download.wait, &p_sys->download.lock_wait);
> -            if (!vlc_object_alive(s) || s->b_error) break;
> +            if (!vlc_object_alive(s) || s->b_error || p_sys->b_quit) break;
>         }
>         vlc_mutex_unlock(&p_sys->download.lock_wait);
>
> --
> 1.7.8.3
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list