Commit 64cbdb74 authored by Ilkka Ollakka's avatar Ilkka Ollakka

httplive: cosmetic retab

parent 675ab6e2
...@@ -2309,50 +2309,50 @@ static int Read(stream_t *s, void *buffer, unsigned int i_read) ...@@ -2309,50 +2309,50 @@ static int Read(stream_t *s, void *buffer, unsigned int i_read)
while (length == 0) while (length == 0)
{ {
// In case an error occurred or the stream was closed return 0 // In case an error occurred or the stream was closed return 0
if (p_sys->b_error || !vlc_object_alive(s)) if (p_sys->b_error || !vlc_object_alive(s))
return 0; return 0;
// Lock the mutex before trying to read to avoid a race condition with the download thread // Lock the mutex before trying to read to avoid a race condition with the download thread
vlc_mutex_lock(&p_sys->read.lock_wait); vlc_mutex_lock(&p_sys->read.lock_wait);
/* NOTE: buffer might be NULL if caller wants to skip data */ /* NOTE: buffer might be NULL if caller wants to skip data */
length = hls_Read(s, (uint8_t*) buffer, i_read); length = hls_Read(s, (uint8_t*) buffer, i_read);
// An error has occurred in hls_Read // An error has occurred in hls_Read
if (length < 0) if (length < 0)
{ {
vlc_mutex_unlock(&p_sys->read.lock_wait); vlc_mutex_unlock(&p_sys->read.lock_wait);
return 0; return 0;
} }
// There is no data available yet for the demuxer so we need to wait until reload and // There is no data available yet for the demuxer so we need to wait until reload and
// download operation are over. // download operation are over.
// Download thread will signal once download is finished. // Download thread will signal once download is finished.
// A timed wait is used to avoid deadlock in case data never arrives since the thread // A timed wait is used to avoid deadlock in case data never arrives since the thread
// running this read operation is also responsible for closing the stream // running this read operation is also responsible for closing the stream
if (length == 0) if (length == 0)
{ {
mtime_t start = mdate(); mtime_t start = mdate();
// Wait for 10 seconds // Wait for 10 seconds
mtime_t timeout_limit = start + (10 * UINT64_C(1000000)); mtime_t timeout_limit = start + (10 * UINT64_C(1000000));
int res = vlc_cond_timedwait(&p_sys->read.wait, &p_sys->read.lock_wait, timeout_limit); int res = vlc_cond_timedwait(&p_sys->read.wait, &p_sys->read.lock_wait, timeout_limit);
// Error - reached a timeout of 10 seconds without data arriving - kill the stream // Error - reached a timeout of 10 seconds without data arriving - kill the stream
if (res == ETIMEDOUT) if (res == ETIMEDOUT)
{ {
msg_Info(s, "timeout limit reached!"); msg_Warn(s, "timeout limit reached!");
vlc_mutex_unlock(&p_sys->read.lock_wait); vlc_mutex_unlock(&p_sys->read.lock_wait);
return 0; return 0;
} }
else if (res == EINVAL) else if (res == EINVAL)
return 0; // Error - lock is not locked so we can just return return 0; // Error - lock is not locked so we can just return
} }
vlc_mutex_unlock(&p_sys->read.lock_wait); vlc_mutex_unlock(&p_sys->read.lock_wait);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment