<div dir="ltr"><div><div><div><div>Thank you for your review, I did some tests for the two cases.<br><br></div>Firstly, I created a 67 milliseconds TS file. It cost about 250 ms in a loop.<br><br>vlc --loop out.ts 2>&1 |grep "playlist error"<br>[0000000001fcb3b8] core playlist error: --- 7269653 ms<br>[0000000001fcb3b8] core playlist error: --- 263 ms<br>[0000000001fcb3b8] core playlist error: --- 246 ms<br>[0000000001fcb3b8] core playlist error: --- 247 ms<br>[0000000001fcb3b8] core playlist error: --- 278 ms<br>[0000000001fcb3b8] core playlist error: --- 263 ms<br><br></div>I think it is reasonable to assume that even for a shorter beep sound (mid format) it will cost more than 100 ms in a loop.<br><br></div>On the other hand, it cost less than 10 ms to pass an invalid item, about 5ms on average (of couse this depends on how fast the computer is). So for one thunsand of items it cost about 5 seconds. If you put a lot items in a playlist, you should afford that. Wait a few seconds is better than freeze the UI for a very long time and have to force close the window.<br><br>So is it acceptable for<br>+            if( mdate() - i_time < 50000 ) // 50 ms<br></div>or another reasonable value?<br><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 25, 2016 at 4:02 AM, Rémi Denis-Courmont <span dir="ltr"><<a href="mailto:remi@remlab.net" target="_blank">remi@remlab.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>Le 2016-02-24 07:16, Zhao Zhili a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
---<br>
 src/playlist/thread.c | 14 ++++++++++++++<br>
 1 file changed, 14 insertions(+)<br>
<br>
diff --git a/src/playlist/thread.c b/src/playlist/thread.c<br>
index a348479..21bb090 100644<br>
--- a/src/playlist/thread.c<br>
+++ b/src/playlist/thread.c<br>
@@ -498,6 +498,8 @@ static void *Thread ( void *data )<br>
             continue;<br>
         }<br>
 <br>
+        int count = 0;<br>
+        mtime_t i_time = 0;<br>
         while( !p_sys->killed && Next( p_playlist ) )<br>
         {   /* Playlist in running state */<br>
             assert(p_sys->p_input != NULL);<br>
@@ -505,6 +507,18 @@ static void *Thread ( void *data )<br>
             do<br>
                 LoopInput( p_playlist );<br>
             while( p_sys->p_input != NULL );<br>
+<br>
+            /* prevent playing an invalid playlist<br>
indefinitely */<br>
+            if( mdate() - i_time < 500000 )<br>
+            {<br>
+                count++;<br>
+                if( count > p_playlist->current.i_size<br>
)<br>
+                    break;<br>
+            }<br>
</blockquote>
<br></div></div>
On the one hand, there could be just one valid item of a few hundred milliseconds in the playlist (e.g. alarm sound). On the other hand, there could be thousands of items in the playlist all invalid.<br>
<br>
This patch breaks the first use case, and fails to fix the second one.<div><div><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+            else<br>
+                count = 0;<br>
+<br>
+            i_time = mdate();<br>
         }<br>
 <br>
         msg_Dbg( p_playlist, "nothing to play" );<br>
</blockquote>
<br>
-- <br></div></div><span><font color="#888888">
Rémi Denis-Courmont<br>
<a href="http://www.remlab.net/" rel="noreferrer" target="_blank">http://www.remlab.net/</a><br>
_______________________________________________<br>
vlc-devel mailing list<br>
To unsubscribe or modify your subscription options:<br>
<a href="https://mailman.videolan.org/listinfo/vlc-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/vlc-devel</a><br>
</font></span></blockquote></div><br></div></div></div>